シフトJIS では、第3水準・第4水準の漢字を扱えないのか? (5)-JIS X 0213 を使うシフトJIS もある-

前回シフトJIS文字集合として JIS X 0201JIS X 0208 を使っていると書いたが、JIS X 0208 の代わりに JIS X 0213 を使うシフトJIS が存在する。
その名も、Shift_JISX0213 で、JIS X 0213 の附属書に規定されている。
先ず、JIS X 0213 について説明すると、この規格は2000年に制定された。これは、JIS X 0208 で規定された文字を全てそのまま含み、それに加えて第3水準・第4水準と呼ばれる文字を規定している。
JIS X 0208 が、94区×94点の8836個のスペースを用意しているのに対し、JIS X 0213 はもう1つ94区×94点のスペースを用意し、これを第2面と呼んでいる。それに伴い、JIS X 0208 で用意されていた94区×94点を第1面と呼んでいる。
第1面の JIS X 0208 と共通の文字は、区点位置も JIS X 0208 と同じだが、実は、 JIS X 0208 は94区×94点の8836個のスペースを全て使っている訳ではない。JIS X 0208 が規定しているのは、6879字であり、第1面には空きがある。JIS X 0213 は、この空きに新たに文字を詰め込んでいる。これが、第3水準の文字である。それでも、隙間なく詰め込んだ訳ではなく、第1面に規定されるのは8787字である。そして、第2面には、2436字が規定され、これが第4水準の文字である。
では、Shift_JISX0213 が実際どのように JIS X 0201JIS X 0213 を符号化しているのか見てみよう。
JIS X 0201 については、そのまま1バイトで表す。
JIS X 0213 の第1面については、(区番号-1)を2で割って小数点以下を切り捨て、区番号が1以上、62以下の時は、これに16進数の 81 を足したもの、区番号が63以上、94以下の時は、16進数の C1 を足したものを1バイト目の符号とする。
そして2バイト目の符号は、区番号が奇数の場合、点番号が1以上63以下の時は、点番号に16進数の 3F を足し、点番号が64以上94以下の時、点番号に16進数の 40 を足したものであり、区番号が偶数の場合、点番号に16進数の 9E を足したものである。
ここまでは、JIS X 0208 を使ったシフトJIS と同じである。ただし、上で見たように、JIS X 0208 の第1面(というか第1面しか無いのだが)には、空きがあった。(JIS X 0213 の第1面にも空はある。)ということは、区番号1以上62以下とか63以上94以下とか言っても、該当しない箇所があった訳だ。
JIS X 0213 の第2面については、区番号が1の時、3以上5以下の時、8の時、12以上15以下の時、区番号に16進数の 1DF(10進数の479)を足したものを2で割って小数点以下を切り捨てたものから、区番号を8で割って小数点以下を切り捨てたものに3を掛けたものを引いたものが1バイト目の符号であり、区番号が78以上94以下の時、区番号に16進数の 19B(10進数の411)を足したものを2で割って小数点以下を切り捨てたものが、1バイト目の符号である。
これは、2面1区、3~5区、8区、12~15区、78~94区を1バイト目の F0 から FC に割り当てるためである。因みに、JIS X 0213 の第2面には、これらの区以外には文字は存在しない。
そして、2バイト目の符号は、第1面の時と同じ方式で計算する。
具体例で見てみると、1面15区29点の第3水準漢字「嚬」は、885C と計算される。これが、『増補改訂 JIS 漢字字典』に載っていた S-JIS の正体である。
もう一つ具体例を見てみると、2面1区21点の第4水準漢字「亻」(にんべん)は、F054 になる。
以上が、Shift_JISX0213 の説明である。
シフトJIS では、第3水準・第4水準の漢字を扱えないのか?」に対しては、「Shift_JISX0213 を使えば、第3水準・第4水準の漢字も扱える」が答えだ。ただし、規格上は第3水準までの実装というものが許されているらしく、その場合は、第3水準までである。
ここで、「Shift_JISX0213 というものがあるのはわかった。でも、そんなものにお目にかかったことが無い。」という方もいるかもしれない。たしかに、Shift_JISX0213 は、それほど普及しているとは言えないが、実装されていないということは無い。
例えば、macOS ではよく使われているテキストエディタの CotEditor では、エンコーディングとして「Shift JIS X0213」を選べる。さらに言えば、macOS に標準で付属しているテキストエディットでも同様である。しかし、こちらは[環境設定]->[開く/保存]->[エンコーディング]の「エンコーディングリストをカスタマイズ」をしないとメニューに現れて来ないので、あまり知られていないのかもしれない。
早速、CotEditor またはテキストエディットで「Shift JIS X0213」を選んで、「嚬」(第3水準)や「亻」(第4水準)を貼り付けてみると、きちんと表示されるし保存も出来る。このファイルを秀丸エディタのバイナリモードで開くと、「嚬」は 88,5C,「亻」は F0,54,であることが確認できた。