シフトJISコードと ASCIIコードの共存

(1/1)
JIS X 0208 によって漢字を扱うことができるようになったが、ASCIIコード(ISO 646)と混在する場合が出てきた。たとえば、プログラムのソースコードは ASCIIコード で書かれているが、その中で日本語を扱うために JIS X 0208 を混在させる必要が出てきたのである。
そこで登場したのが、シフトJISコード である。

JIS X 0208 とシフトJISの関係

シフトJISコード は、JIS X 0201 8単位表の隙間に、JIS X 0208 を押し込んだ形になっている。
具体的には、英数字の未定義領域(0x81~0x9F)と、カタカナの未定義領域(0xE0~0xEF)を第1バイトに、0x40~0x7E・0x80~0xFCを第2バイトとする2バイトのコードを用意した。

JIS X 0208 の区点コードから シフトJISコード を求める変換式は下記の通りである。

第1バイト
  1≦k≦62のとき、S1=(k-1)÷2+0x81
  63≦k≦94のとき、S1=(k-1)÷2+0xC1

第2バイト
 kが奇数、かつ
  1≦t≦62のとき、S2=t+0x3F
  63≦t≦94のとき、S2=t+0x40
 kが偶数のとき、S2=t+0x9E

ASCIIコードとの共存

シフトJISコード第1バイトは、下表の薄いピンク色の領域だ。JIS X 0201 8単位表の未定義領域に割り当てられている。
シフトJISの第1バイト
シフトJISの第1バイト
第2バイトは、下表の薄いピンク色の領域だ。JIS X 0201 8単位表と重なるものが多い。プログラムで誤って第1バイトと第2バイトを分離してしまうと、第2バイトが ASCIIコード とみなされ、意図している漢字ではない英数字カナがあらわれたり、文字化けを起こす。
シフトJISの第2バイト
シフトJISの第2バイト
たとえばプログラミングで文字列の一部を取り出す substr 命令などは、プログラミング言語の使用によっては2バイト・コードを分割してしまうことがあるので注意が必要だ。PHPの  substr  がまさにそうで、シフトJISを含む文字列を分解する場合には、 mb_substr  を用いなければならない。

とくに2バイト目に0x5Cを含む文字はエスケープシーケンスとみなされ、文字化けを起こす可能性が高いことは、「JIS X 0201――バックスラッシュと円マーク」で述べたとおりだ。
エスケープ文字が含まれているかどうかを調べるツールを再掲する。
調べる文字列:

シフトJIS の興隆

NEC PC-9801
NEC PC-9801
シフトJIS はJIS規格ではなく、業界主導で制定された。パソコンに漢字ROMが搭載されるようになった1980年代、アスキー、マイクロソフト、三菱電機などが制定に関わったとされている。
業界主導であったことから、パソコンにおける文字列の格納形式は シフトJIS は主流になってゆく。ワープロでは独自のデータ形式で格納するものが多かったが、シフトJIS へのデータ変換機能を備えるようになる。
1983年(昭和58年)に登場した日本語 MS-DOS 2.0シフトJIS を標準とした。この流れは、DOS/V(1990年) や Windows 3.1(1992年)にも受け継がれていく。
Windows NT 4.0(1996年)と続くWindows 98(1998年)になり、Unicode が利用できるようになる。これについては後述する。
シフトJIS がデファクトスタンダードになったことを受けて、JIS X 0208:1997(別名 97JIS)の附属書1に「シフト符号化表現」を掲載し、これを認めた。

参考サイト

(この項おわり)
header