シフトJISで令和の合字が使えない理由

新元号「令和」の発表後から「え?シフトJISで令和の合字が使えないの?なぜ?UNICODEでは使えるのに?」という疑問がブログやSNSで散見されるようになりました。
なぜ使えないのでしょうか?

【そもそもJIS X 0208にコード(コードポイント)が割り当てられないから】
シフトJISはいわゆる半角文字規格のJIS X 0201と全角文字規格のJIS X 0208を混ぜて表現するためのエンコードです。
シフトJIS(CP932を示す)は シフトJIS単体で存在しているわけではありません。
0201と0208が(親として)存在してこそのシフトJISなのです。
つまり元になっている0208に令和合字のコードポイントが追加されない限りシフトJISはどうしようも無いわけです。
そして現在(2019.4.14)のところ0208に追加が行われるというアナウンスはありません。

【もしもJIS X 0208に「㋿」が追加されることになったら?】
0208に令和の合字が登録されるとシフトJISだけではなく0208をターゲットとしているEUC-JPやISO-2022-JP等も対応を迫られることになり、割と大変なことになってしまいます。
※ISO-2022-JPは電子メールで使用されていることが多いため、多くのメールソフトの改修・動作確認が必要になる
さらに後継規格のJIS X 0213が0208をベースとしているため、単純に0208の空きに登録するわけにはいかず、0213の空きに割り当てる必要があります。
そして0213にコードポイントを割り当てた場合は、0213をターゲットとしているエンコード「Shift_JISX0213、EUC-JP-2004、ISO-2022-JP-2004等」も対応しなくてはならなくなります。

【JIS X 0208を無視して令和合字のコードポイントを無理矢理追加するという手はあるが】
シフトJISが忌み嫌われている理由に「0208規格を無視してメーカーが独自の文字を追加してしまった」があります。
いわゆるWindowsとMacでは違う文字に化けて(見えて)しまうという問題です。
※マイクロソフト社やアップル社が悪いという話ではありません

しかし今回の令和合字についてマイクロソフト社は公式に「シフトJISではサポートしない」と明言しているため、少なくともCP932に令和合字は入ることは無いでしょう。
そもそも20年ほど前に、マイクロソフト社はシフトJIS( マイクロソフト標準キャラクタセット )を現在の仕様で凍結すると宣言していました。
http://www.jepa.or.jp/jepa_cms/wp-content/uploads/2010/05/jepa0000518783.pdf
※10ページを参照

2001年現在、Windowsを含む多くのOSやアプリケーションはUNICODEを使用しているため、コストとリスクが発生する「0208を無視してシフトJISを拡張」は行われないと思われます。

【UNICODEに令和合字が存在するのにシフトJISで使えない理由は?】
OSをWindowsに限定しますが、OSの内部(各種APIやファイルシステムなど)では文字コードはUNICODE(UTF-16)を使用しています。
※初代NT系のWindowsNT3.1からUNICODE(昔のNT系はUCS-2)を使用しています
UNICODEアプリケーションはOSのAPIをそのまま呼び出していますが、シフトJIS(いわゆるMBCS)アプリケーションは「シフトJISをUNICODEに変換した後にAPIを呼び出す」という流れで動いています。
※~Aという名のANSI系APIを呼び出して変換を行っている
OSから戻される文字も「UNICODEからシフトJISに変換」されて戻されます。
※クリップボードに入っている文字列も同じ
このUNICODEとシフトJISの変換には「変換辞書」等と呼ばれる変換マップが使われるのですが、この変換辞書に令和合字が載っていないので令和合字は変換エラーとなります。
※”?”に変換される
とにかく、シフトJIS(0208 or 0213)に令和合字のコードポイントが割り当てられない限りどうしようもありません。

【シフトJISアプリケーションで令和合字を出すことは絶対に出来ないのか?】
確証はありませんが。
シフトJISアプリケーション(C/C++で)は、例えば文字列を描画するAPIとしてTextOut等を使用していると思いますが、TextOutと書かれたコードは実際にはTextOutAというANSI系APIが呼び出されるようコンパイル時に変換されます。
そこでTextOutとは書かず、引数にUNICODE(UTF-16)文字列を使用するTextOutW-APIを呼び出せば令和合字を表示・印刷することが可能かもしれません。

以上

シフトJISが終わっていることやUNICODEについてのことを書いた同人技術誌を販売しています。よろしければどうぞ。
https://badsector.booth.pm/items/907868

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA