2015年8月27日木曜日

富士通メインフレームの文字コード(最終回)

こんにちは、綱島です。



前回、フォントを切り替えてPCにはない文字「つちよし」(土かんむりの吉)を表示する方法を紹介しました。
それは、ライブラリに問い合わせをすると、コードとフォントが指定されるので、それにしたがって表示するというものでした(このライブラリは、富士通社製「JEF拡張漢字サポート」です)。
そもそも、なんでそんなことをしなければいけないのでしょうか?

PCで使用するJISコードは、非漢字(ひらがな、かたかな、記号など)、第1水準漢字(一般日本語表記用漢字)、第2水準漢字(地名・人名を含む個別分野用漢字)があります。

富士通メインフレームで使用している文字コードは、JEF(Japanese processing Extended Feature)コードと言います。
このJEFコードには、基本非漢字、第1水準漢字、第2水準漢字、拡張漢字、拡張非漢字、利用者定義文字あります。
JEFコードの基本非漢字、第1水準漢字、第2水準漢字は、それぞれJISコードの非漢字、第1水準漢字、第2水準漢字に対応しています。
しかし、JEFコードの拡張漢字、拡張非漢字、利用者定義文字は、対応するものがJISコードにはありません。
無い文字をどうするかと考えた場合、外字領域に登録すればなんとかなるのでは?と、思われる方もいらっしゃる方もいません。しかし、これら3つの文字数は、拡張漢字:4039文字、拡張非漢字:1010文字、利用者定義文字:3102文字となり、合計8,151文字になります。
JISの外字領域の文字数は、1,880文字ですので、拡張文字だけでも不足しています。
そこで、フォントを切り替えることで、全く異なる文字を表示できるように工夫されています。


では、富士通の漢字を表示する方法をまとめると、以下のようになるのでしょうか?


  • 基本非漢字・第1水準漢字・第2水準漢字
    計算でJISコードに変換して、MS明朝などで表示する
  • 拡張漢字・拡張非漢字・利用者定義文字
    ライブラリに問い合わせして、指定されたフォントとコードで表示する


いえいえ、実は、落とし穴があります。

JEFコードは、78年度に制定された文字コードが基本となっています。いわゆる旧字です。JISコードと一対一と言っていましたが、正確に言うとJIS78とJEFは一対一なのです。そのため、JIS83やJIS90が基本となっているWindowsとでは、字体変更文字に違いが出てしまいます。

例えば、唖という文字を例で説明します。
JISコードは、0x3022です。
メインフレームの画面で「唖」を確認すると、以下のように0x47B9ということがわかります。


JISコード+0x8080になっていません。このコードは拡張漢字の範囲になります。
0x8080を加えた0xB0A2も一緒に確認してみましょう。


旧字が表示されていました。
落とし穴と書いたのはこのことで、第一水準の文字だから単純に計算すると、文字が旧字に変わってしまうことがあるのです。
では、どうしましょうか?
両方の文字がエミュレータ画面に表示されていますね。拡張漢字と同じで、ライブラリに問い合わせすると、0x47B9の文字コードであれば「FF特殊112」が指定されますし、0xB0A2であれば「FF特殊111」というフォントが指定されます。ここで、初登場の「FF特殊111」というフォントですが、JIS78に対応した文字が入っているのです。指定された場合、旧字ということになりますし、指定されない場合は、MS明朝などのフォントと同じ文字が入っていますので、「FF特殊111」を使っても使わなくても構いません。

従いまして、富士通の漢字を表示する方法をまとめると、

全ての文字は、ライブラリに問い合わせて、その結果に従ったコードとフォントで表示する

なります。


0 件のコメント:

コメントを投稿