JISコードをずらして配置した、Windows等で広く使われた日本語文字コード
Shift_JIS(シフトジス)とは、JISコードの文字番号を別の値に「ずらして(shift)」配置し直した日本語文字コードです。JIS X 0208の漢字を、ASCIIの1バイト文字とぶつからない空き番号に再配置することで、両者を1つの文章の中で自然に混ぜられるようにしました。
身近な例で言うと、満員の駐車場で、空いている区画に車をずらして停めるのに似ています。ASCII(英数字)がすでに使っている番号を避け、漢字を空いている番号にずらして停める──だから名前に「シフト(ずらし)」が付いています。
Shift_JISは特にWindowsやガラケーなどPCの日本語環境で長年の標準として使われ、多くの日本語ファイル・ソフトで採用されてきました。上の図解では、どのバイト値がASCII用・第1バイト用・第2バイト用に割り当てられているかをまとめています。
Shift_JISの設計で最も巧妙なのが「2バイト文字の各バイトを、制御コードや一部のASCIIとぶつからない位置に配置した」点です。これにより、特別な切り替え記号(エスケープ)なしで1バイト文字と2バイト文字を混在させられます。
具体的な工夫は次のとおりです。
・第1バイト:0x81〜0x9F と 0xE0〜0xEF 付近を使う。これはASCII(0x00〜0x7F)が使わない領域なので、見ただけで「2バイト文字の始まり」と分かる
・第2バイト:0x40〜0x7E と 0x80〜0xFC を使い、制御コード領域(0x00〜0x1F)を避ける
・半角カナ:0xA1〜0xDF に1バイトのまま残す(JIS X 0201と同じ)
なぜ制御コード領域を避けるのかというと、当時のソフトやプリンタが 0x00〜0x1F を「特別な命令」として解釈してしまうからです。もし漢字の一部にこの値が混ざると、改行や画面クリアなどの誤動作を起こします。Shift_JISはこの危険な領域を巧みに避けることで、既存のシステムでもそのまま日本語を扱えるようにしました。
ただし注意点として、第2バイトに「\」や「[」などASCII記号と同じ値が現れることがあります。これがプログラムで「ダメ文字(5C問題)」と呼ばれる文字化けの原因になります。この欠点は、後述のEUC-JPやUTF-8と対比すると理解しやすくなります。
Shift_JISは、長らくWindowsパソコンやガラケーなどPC・組み込み機器の日本語環境で標準的に使われてきた文字コードです。Windowsの「メモ帳」で日本語を保存すると、かつては既定でShift_JIS(厳密にはその拡張のCP932)が使われていました。
同じ日本語でも、システムによって使われる文字コードに傾向がありました。
・Shift_JIS:Windows・古い携帯電話・多くのPCアプリ
・EUC-JP:UNIX系のサーバーやワークステーション
・JISコード(ISO-2022-JP):電子メール
このように環境ごとにコードが異なったため、ファイルをやり取りすると文字化けが起きやすいという問題がありました。
現在は世界中の文字を1つで扱えるUnicode(UTF-8)への移行が進み、Web・スマホ・新しいアプリではUTF-8が標準です。それでも古いシステムやファイル、CSVデータなどでShift_JISが残っているため、文字化けを直す場面で知識が役立ちます。文字コードは「Shift_JIS=Windows系」「EUC=UNIX系」「ISO-2022-JP=メール」「現在はUTF-8が主流」という対応で整理しておくとよいでしょう。