2015年6月2日火曜日

富士通メインフレームの文字コード

はじめまして、綱島と申します。




今回からこのブログのライターに加えていただきましたので、よろしくお願いします。
私は、端末エミュレーターのソフトウェア開発を担当しています。端末エミュレーターとは、専用の端末と同じ機能をソフトウェアで実現したものです。その専用端末のうち、IBMや富士通のメインフレームの端末のエミュレーターを対象にしています。

さて、私の最初の話題として、端末エミュレーターでよくあることをお話しします。 この画面は、富士通メインフレーム上のテキストデータを端末エミュレーターで表示したものです。



特に問題なく表示できていると思います。

次に、エミュレーターの機能を使って、このデータをPCにダウンロードしてみました。



この画像は、ダウンロードしたテキストファイルをメモ帳で表示させています。

エミュレーターではすべての文字が表示できていたのに、ダウンロードしたファイルでは2行目の1文字目だけ「□」になってしまっています。

これがいわゆる文字化けです。2行目の1文字目には何か違いがあるということになりますね。

もう一度メインフレームに戻って、この文字のコードを見てみましょう。

メインフレームのエディタで、文字コードを表示してみました。



この画面は普段メインフレームを使っていない方には見慣れない表示だと思います。文字の下に16進数で文字コードが表示されているのですが、1バイトずつ縦に読みます。上段が1バイトを16進で表記した1桁目で、下が2桁目です。たとえば1文字目の「吉」のコードは、1バイト目が0xB5で、2バイト目が0xC8。文字コードとしては0xB5C8となります。



そのように文字コードを見ると。上の吉と下の吉のコードが異なりますね。文字をよく見ると、上の吉の「口」の上に「士」です。下の吉は、「口」の上に「土」です。下の吉は、「つちよし」と言われている文字で、有名な牛丼屋さんの吉もこの文字です。

この「つちよし」は、パソコンが古くから使用している文字の世界には存在しません。

「つちよし」以外の文字はパソコンにもありますので、メインフレーム上での文字からパソコンの文字へ変換することができます。

メインフレームとパソコンの両方にある文字は、同じ文字を一対一で紐付けることができるので、ダウンロードした時に変換が行われています。上の吉なら、メインフレームでの文字コードは、0xB5C8です。パソコンでの文字コードは、シフトJISなら0x8B67で、JISコードなら0x3548です。
画面上の文字の変換結果を表にまとめると、以下のようになります(MFはメインフレームの略です)。



JISコードとシフトJISコードが計算で変換できることはご存じだと思いますが、メインフレームの文字コードと、JISコードを見比べてみてください。よくよく見ると、JISコードの各バイトの8ビット目を"0"から"1"に変えたものがメインフレームの文字コードになっています。つまり、富士通メインフレームとJISの間も、

JISコード  = 富士通メインフレームの文字コード - 0x8080

という計算でコード変換が可能だということです。

富士通のメインフレームで扱っている文字のうち、基本的な文字は計算で文字コードが算出できます。

ただし、「つちよし」のほうは、文字コード自体が0x8080より小さいので、計算することができません。実はこの文字は「拡張漢字コード」といって、JISコードとの間で計算により変換ができないコードになります。

ダウンロード時に変換できない文字は仕方なく、存在しない文字ということで、「□」にしてしまっているというわけです。





さて、お気づきかもしれませんが、端末エミュレーター上では「つちよし」も正しい文字で見ることができましたね。「つちよし」はパソコンに無い文字のはずなのに、なぜエミュレーターでは正しく表示されるのでしょうか?


次回は、その理由をお話ししましょう。

0 件のコメント:

コメントを投稿