5. シフトJISコード5−1 シフトJISコードとは前章に述べたように、JISコード(JIS7)は、制御コードと一緒に使わないと半角文字と全角文字の混在が果たせません。 この問題を解決するために、1980年代に、マイクロソフト社を中心とした私企業が、「制御コードなしで半角文字と全角文字の混在が果たせる」よう、 JISコードを規則的に変換(シフト=移動)させたコード体系を作り出しました。 これがシフトJISコード体系です。MS-DOS、 Windows、MacOS といったパソコンOSの日本語版の内部処理で用いられたため、 Windows の爆発的普及にともなって日本語処理についての事実上の世界標準となり、 最終的には JIS X 0208:1997 でJIS規格に追認されるまでになりました。 5−2 半角ローマ字・半角カタカナ (1バイト文字)一部のネットワークでは7ビットまでの符号(値にすると 0x00 〜 0x7F )しか扱えません。 そのため、JISコードにはJIS7規格が作られたわけですが、 シフトJISはもともとOSの内部処理用に作られた規格ですから、そんなことは無視して、 符号の8ビット目もコードの識別用に活用します。 半角カタカナにはJIS8が採用され、晴れて 0xA1 〜 0xDF へと割り当てられました。
例えば、"2ネンAグミ" (←すべて半角文字)という文字列を画面上に表示または印刷するには、 以下のような文字コードの列(バイト列)となります。 ◆JISコード7ビット符号 (11バイト必要) ◆
◆シフトJISコード (7バイトでOK) ◆
5−3 全角文字 (2バイト文字) JIS7の2バイト文字は、第1バイト・第2バイトともに 0x21 〜 0x7E の範囲の値のみを用います。 半角英数字と値が重なるため、区別のためには漢字制御コードが不可欠でした。 シフトJISでは、2バイトコードの第1バイトを 0x81 〜 0x9F、少し飛んで 0xE0 〜 0xFC の領域に「シフト」させることによって、 「0x81 〜 0x9F または 0xE0 〜(0x7Fを抜かして)〜 0xFC が来たら、次の1バイトと合わせて2バイト文字とみなす」 という判別ができる仕組みにしました。 (前節の図表のピンク色の所を参照して下さい。) シフトJISの2バイト文字領域は、 (第1バイト 16×3+13)×(第2バイト 16×11-1+13)≒11,000字 ということになります。この数字は、機種依存文字・外字の領域を含みます。 JIS第1水準+第2水準約 7,000字はすっぽり納まりました。 しかしながら、JIS補助漢字や第3・第4水準は納まりようがありません。 漢字制御コードを挟まなくてよい分、扱うデータ量はそれ以前のJIS符号に比べ激減しました。 下は " ◆JISコード ( 18バイト必要 ) ◆
'愛' という字のシフトJISコードは 5−4 問題点 シフトJISは、半角英数・半角カナ・全角文字を混在させてもデータ量(バイト数)と表示桁数が常に一致するので、 内部処理を非常にシンプルな作りにできます。 反面、バイトデータの8ビットめを文字識別用に使ってしまったので、インターネットの世界ではそのまま使えず、 ネットワークt通信関係の処理では7ビット符号に変換(エンコード)する必要があります。 第2バイトもシフトさせている範囲( 0x40 〜 0xFC )が、半角英数字と一部重なります。 このことが、データの互換性に関して不具合をもたらす可能性を含んでいます。 例えば、シフトJISコードで2バイトめが'\'と同じコード(0x5C)になる文字を含む文章を、 シフトJISではない文字コード体系のシステムで読み込んだ時、文字化けを起こすことがあります。 |