はじめに
どうも、内部リンクやメタディスクリプションなど、
SEO対策が壊滅的なしがないITエンジニアです。
訳がわからないと思いつつ適当に設定を追加していると
あっという間に時間が過ぎ去って絶賛困惑中である。
そもそも、記事数が少なすぎるため増やしてから考えた方がいいかもしれない。。。
さて、今回は文字コードの内、EBCDIC(エビシディック)について解説していく。
この文字コードはもはや時代錯誤な文字コードにも掛からわず、未だにEDI上で使用されることもある厄介者である。
筆者も散々コイツに付き合わされてきたが、その度に苦労を強いられている。
早く廃れてほしいものである。
なお、文字コードについては下記リンクで説明しているためこちらに移動してほしい。
[用語集]文字コードの解説① – 路傍の石なITエンジニアの雑記 (ta-bossweb.com)
EBCDICとは
EBCDICとは、米IBM社が策定した文字コード(符号化方式)の一つ。
EBCDICとは – 意味をわかりやすく – IT用語辞典 e-Words
最も基本的なものは(半角)英数字、記号、制御文字を収録した8ビット(1バイト)のコード。
数値を符号化するBCD(Binary Code Decimal)を拡張し、アルファベットや基本的な記号、制御文字などを収録した。
原型としてのEBCDICは1バイトのコードだったようだが、
現時点で使用されているEBCDICは1~2バイトコードとなっている。
これは日本語文字を追加したためであるが、厄介な点として、
各ベンダーごとに文字コードの割り振り方が異なるのである。
例えば、例えば日立製作所が規定したEBCDICコードは通称EBCDIK(あるいはKEISという)とされ、
他にも富士通のJEF漢字、IBM社のIBM漢字、NECのNEC漢字(JIPS(E)とも)と文字コードが乱立している。
代表的なのはこの四つの文字コードだが、EBCDICとJISコードを併用する場合もあり、
意味不明なレベルで亜種が多い。(誰か統一しろ。。。)
なお、通常のテキストエディタでは文字化けするため、
バイナリエディタなどEBCDICコードに対応したテキストエディタを使用する必要がある。
こういう点が本当に不便。。。
EBCDICコードを開設するサイトは非常に少ないため可能な限りリンクを貼っておく。
EBCDIC――汎用機時代の文字コード (pahoo.org)
こちらはHULFTというファイル転送ソフトのリファレンスだが、
EBCDICコードごとの差異が一目でわかるため便利である。
取り扱い時の注意事項
漢字コードを取り扱う際に漢字項目の両端に、
1バイトのエスケープシーケンスが設定されることがある。
そのため、EDIで固定長レイアウトで取り扱う際は実際の項目長より2バイト少ないことに注意しよう。
なお、多くの場合漢字項目の前に0x0Eが入り、漢字項目の後に0x0Fが入る。
また、EBCDICとは直接関わりはないが、
バイト数の節約のために数値項目にパック十進数が使用されることがある。
パック十進数は1バイトを4ビットずつに分解して数値や符号を表す記法である。
1バイト中に2つの数値を入れることができるため容量の節約にはなるが見辛い。
エスケープシーケンスとパック十進数で謎の記号が複数現れるため、EBCDICの解読は大変なのである。
パック10進数とは – 意味をわかりやすく – IT用語辞典 e-Words
IBM漢字
IBM漢字コードはIBM漢字システムが使用している文字コードであり、
IBM漢字システム – Wikipedia
IBM日本語文字セットと呼ばれることもある。
IBM漢字について説明する情報がほとんどないため詳細は不明である。
ただ、カナ文字拡張や英小文字拡張など1バイトの箇所に亜種があり、
IBM漢字という認識は合っていても文字化けすることがある。
そういった問題があった場合は前述のHULFTのリファレンスを見てほしい。
また、Javaでサポートされているエンコーディングに含まれている。
そのため、一応JavaでEBCDICを取り扱うことができる。
使用したのは何年も前のことなのでうろ覚えだがCP942だったはず。。。
サポートされているエンコーディング (oracle.com)
なお、文字コード表については下記リンクを参照してほしい。
IBM漢字コードからUTF8やSJISに変換する表を手に入れたい→手に入れた – Qiita
NEC漢字(NEC選定IBM拡張文字、あるいはJIPS)
NECが、JIS C 6226-1978に対する拡張として定義した文字集合(CCS)の一つの俗称。
NEC特殊文字 ‐ 通信用語の基礎知識 (wdic.org)
IBMが採用したIBM拡張文字は、JIS C 6226の範囲外に定義されていた。
NEC選定IBM拡張文字 ‐ 通信用語の基礎知識 (wdic.org)
NECは、この文字集合をJIS C 6226の範囲内に符号位置を変更して採用した。
これが、NEC選定IBM拡張文字である。
IBM漢字以上に情報がほとんどない文字コードである。
筆者の会社ではわりと馴染みのある文字コードなのだが如何せん正式名称がわからない。
なお、JIPS(E)という名称でも呼ばれることがあるらしい。
ただし、システムの名称でもあるらしいので非常にややこしい。
それらしい名前が多すぎる。。。
文字コード – とほほのWWW入門 (tohoho-web.com)
JEF漢字
JEF漢字コード(ジェフかんじこーど、Japanese processing Extended Feature)は、1979年に富士通が策定した文字コード。同社のメインフレーム『GSシリーズ』、及び、ビジネスサーバ『PRIMERGY 6000シリーズ』において用いられる。
JEF漢字コードとは – わかりやすく解説 Weblio辞書
筆者はあまり使用したことがないため詳細は不明である。
1バイト文字に関しては他のEBCDICと大差ないと思いたい。。。
名前が正式なものなのは非常に好感が持てる。
ほかのEBCDICコードはソフトやサイトによって名称がバラバラ。。。
そこは他のEBCDICより優れている点であろう。
下記に他サイトのリンクを貼っておく。
ただ、文字コード表は見つけられなかった。。。
また、Javaでは通常IBM漢字以外は使用できないが、
jef4jのライブラリを導入することでJEF漢字コードを変換できるようになるらしい。
EBCDICを扱えるプログラミング言語は基本的にJavaだけなのではないだろうか。。。
jef4j | JEF charset support for Java (hidekatsu-izuno.github.io)
JEFコードは、JIS変換とほぼ同じ?: wtarブログ (seesaa.net)
EBCDIK(KEIS)
なお、この仕様を「EBCDIK」と呼ぶのは日立製作所だけであり、他のメーカーは違う呼び方をしている。また、これらは互いに互換性がない。
EBCDIK ‐ 通信用語の基礎知識 (wdic.org)
日立製作所のEBCDIKまたはEBCDICで日本語が扱えるようにした拡張仕様。日立製作所の汎用機で使われる。
KEIS ‐ 通信用語の基礎知識 (wdic.org)
名前が2つあるややこしい文字コード。
なお、KEISはシステムの名称でもあるらしい。
EBCDICはそういうシステムと同名の文字コードが多い。。。
筆者もShift-JISからEBCDIKにコード変換する依頼で、
Shift-JISからKEIS漢字へのコード変換設定を行ったが上司への説明が面倒だった。
名前が違いますが同じ文字コードです!と説明したのだが半信半疑だったのを覚えている。
EBCDICは別名が多すぎる。。。
なお、JEF漢字と同様に文字コード表は見つけられなかった。。。
最後に
レガシー資産には得てして複数のレガシー技術が使用されているものである。
当時は少ない容量を無駄なく使用するため、あるいは処理速度を確保するために確立された技術だろう。
だが、現代においては容量、処理速度共に当時の何十倍もあるため、
ただわかりづらくなっただけで最早負の遺産と言って差し支えないだろう。
それでも未だに残っているのはホスト時代の処理をそのまま移行したためだろう。
要するに移行をサボったのである。。
そのせいで今になってDX(デジタルトランスフォーメーション)や2025年の崖となって立ちふさがっている。
レガシー技術に精通したエンジニアが不足した今になって騒ぐのはあまりにも遅すぎる。。。
[…] [用語集]文字コードの解説② ~EBCDICについて~ […]