Shift JIS Tips
もともとJIS X 0208は94区×94点 == 8,836文字分のエリアしかない
(そのうちJIS X 0208:1990で文字が割り当てられているのは6,879文字)。
シフトJISでは、
highバイト: 81〜9f、e0〜fc
31 + 29 = 60
lowバイト: 40〜7e、80〜fc
125 + 63 = 188
つまり、60×188 = 11280文字分ある。
これは、11280 / 94 = 120区分に相当する。
もともと、文字の種類を増やすことを目的にしていたわけではなく、
2バイトのうちHighバイトのMSB(8bitめ)を立てて、文字列中で
ASCII文字との区別できるようにし、かつ、
0x80 (下位7bitが0なので、MSBを落とすと'\0'になってしまう)
0xa0 (MSBを落とすと空白。UTF-8になっても分割禁止空白として)
0xa1〜0xdf (いわゆる『半角カナ』)
0xfd〜0xff (MS-Basicの中間コードで使っていた)
の68種類を『避けた』エリア(図中の『 』の部分)をHighバイト
(文字列としてはBigEndianのみなので必ず第1バイトとなる)とし、
また、LowバイトはMSBを立てる必要はなかったが、
0x00〜0x1fの制御コード
0x20の空白
0x21〜0x3fにある記号
0x7f 抹消コード(DEL)
0xfd〜0xff (MS-Basicの中間コードで使っていた)
を避けたため、たまたま120区分になっただけである。
したがって、95〜120区の26区分は、JIS X 0208にマッピング不可能であるが、
このエリアに、IBMが「自社のコードにあるがJISには入らなかったもの」を
割り当てて使ったものがIBM拡張漢字である。
$Id: sjistips.html,v 1.3 2005/03/30 07:33:54 kusakabe Exp $