シフト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