- 「メインフレーム・コンピューター」で遊ぼう - http://www.arteceed.net -

漢字コードの変換

日本語文字コードの変換

1バイトのEBCDICコードの場合ではMVSとMSPは同じ、MVSとVOS3でもほぼ同じである。日立の場合は同じEBCDICでもEBCDIKという若干異なる文字コード表が使用されるが、EBCDICとの違いは一部の記号文字、例えば£や!が、〔と〕(鍵カッコ)になっている点である。 とはいえ、%や@、+?=などメジャーな記号は同じだし、実用上は同じ文字コードと扱っても問題ないであろう。

2バイトの文字コードである、漢字などの全角文字に関してはMVSで使用するIBM漢字コードと、富士通のJEFおよび日立のKEISでは異なるコード体系となっている。海外製のISVソフトウェアでは漢字が使われることはないが、日本で販売するために英語パネルなどを日本語化したような場合に、それを富士通や日立のシステムに移植する際に文字コードの変換が必要になる。

文字コードの変換方法としては、プログラム内の文字列データを変換する方法(静的変換)と、プログラム実行時にパネルやメッセージなどを表示する際に変換する方法(動的変換)がある。どちらの変換であってもIBM、富士通、日立の各社のコードを相互に変換するための基礎となる文字コード表が必要になる。動的変換の場合、一部の文字コード間では計算による変換もできる(例えばJISの第1、第2水準文字はJISコードにx8080を加えるとJEFコードになるなど)のだが、完全ではないし、水準外の文字やユーザー定義の外字などは、変換表に頼らざるを得ない。


文字コード変換表の入手・作成

まだPCもUNIXも企業の商用で使われておらず、TCP/IPなども一般化していなかったメインフレーム全盛の頃は、各社から出ていた文字コード表を頼りに、変換用のテーブルを作ったりしていたが、現在ではTCP/IPのユーティリティーなどで簡単に変換表を作ることができるようになっている。

    MVS:z/OS Communications Serverの場合

    z/OS Communications ServerによってDBCSの変換テーブルがバイナリー、テキスト両方の形式で提供されている。バイナリー形式のテーブルはFTPなどのプログラムによって使用されている。アプリケーションやプログラム製品で使用する独自の変換表に流用するならテキスト形式のテーブルを参照するとよい。TCPIP.SEZADBCXにEZAKJLATなどのメンバー名で格納されている。

    MSP:TISPの場合

    JEFコードベースの変換表なら、TISPのユーティリティーによって変換テーブルを出力できる。ただしロード・モジュール形式のバイナリー・データなのでプログラムで読み込んで独自の変換表の基にするか、SPZAPユーティリティーなどでダンプして参照する。

    メーカーのユーティリティーによる文字コード変換テーブルに関しては、こちらの記事でも解説しているので必要なら参照されたい。文字コード変換テーブルの参照 [1]

なお、日立のKEISコードと富士通のJEFコードは、JIS第1、第2水準の部分に関しては同じである。なので一般的な文字については同じテーブルを流用できるが、それ以外の文字については異なるコードであるとして考える必要がある。


企業が主に使う商用コンピューターがメインフレームだけの頃は、文字コードの変換は自力でやるしかなかったが、オープン系のシステムが主流となりTCP/IPによる相互接続が一般的になった現在では、メインフレームとPCやUNIX系システム間で必要な文字コード変換は、TCPなどのネットワーク・サブシステムに標準実装(例えばFTPでのコード変換)されていたり、メーカーなどからもサポート・プログラムが提供されたりしている。例えばIBMは、バッチやCICSプログラムから利用できるホストコード変換プログラム [2]を提供している。他にもz/OSにはUnicodeサービスというものもある。なのでメインフレームとオープン系の相互変換なら自力でしくみを作らなくても何とでもなるようになった。しかしIBMと富士通/日立のメインフレーム同士の間での変換が必要なら、一旦UnicodeやJISコードなどに変換してメーカー提供のサービスを利用するか、直接相手のコードへの変換を行う場合はやはり変換表を作る必要があろう。また、変換表を作るにしてもコード表を見て手作業で、よりは、利用できる物は何でも利用してなるべく作り込む手間を減らすようにする方がよい。


文字コードは、OSのAPIや内部仕様とは異なる物ではあるが、ソフトウェア製品が日本語文字を扱うのであれば、MVSとMSP/VOS3の間では非互換となる大きな違いのひとつである。