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拡張漢字である。
return

$Id: sjistips.html,v 1.3 2005/03/30 07:33:54 kusakabe Exp $