記事公開日
最終更新日
富士通メインフレームの文字コード

(本記事の情報は、記事の公開日時点での情報であり、その正確性、完全性、最新性等内容を保証するものではありません。)
端末エミュレーターでよくあることをお話しします。
この画面は、富士通メインフレーム上のテキストデータを端末エミュレーターで表示したものです。

特に問題なく表示できていると思います。
次に、エミュレーターの機能を使って、このデータを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コードとの間で計算により変換ができないコードになります。
ダウンロード時に変換できない文字は仕方なく、存在しない文字ということで「□」にしてしまっているというわけです。
さて、お気づきかもしれませんが、端末エミュレーター上では「つちよし」も正しい文字で見ることができましたね。「つちよし」はパソコンに無い文字のはずなのに、なぜエミュレーターでは正しく表示されるのでしょうか?
次回は、その理由をお話ししましょう。