53 68 69 66 74 5F 4A 49 53 82 C6 82 CD 81 41 95 B6 8E 9A 83 52 81 5B 83 68 82 CC 8B 4B 8A 69 82 CC 88 EA 82 C2 82 C5 82 A0 82 E9 81 42
Shift_JISとは、文字コードの規格の一つである。シフトJISとも。
主に日本語を含む文字列を扱う時に使われる文字エンコーディングである。
概要
主に英数字(ほぼASCII)とカタカナを含んだJIS X 0201(いわゆる半角文字)と、ひらがなやカタカナ、漢字、記号などを含んだJIS X 0208(いわゆる全角文字)の、2つの文字集合を同時に表現するために1982年に考案された。
1バイト(8ビット)で全て表現できるJIS X 0201に対し、6879もの文字を含むJIS X 0208を表現するには2バイト必要となる。
しかし、制御文字の他に半角英数字で0x20~0x7E、半角カナで0xA1~0xDFが既に割り当てられていた。
そこで「既存の英数字と半角カナ文字列がそのまま利用可能」かつ「エスケープシーケンスによる状態切り替えが不要(処理速度の都合上)」という条件を満たす為に開発されたのがShift_JISである。
現在はJIS X 0213にて定められたShift_JIS-2004があり、JIS X 0208の文字の範囲に限れば同一のコードとなる。
実装
詳しい説明は他のサイトを参照していただくとして、簡単な説明をすると、
- 1バイト目が0x00~0x7Fもしくは0xA1~0xDFであれば1バイト文字であり、ASCII制御文字、半角英数字、もしくは半角カナのいずれかである。
- 1バイト目が0x81~0x9Fもしくは0xE0~0xEFであれば2バイト文字となり次の1バイトとペアにする。
- 2バイト目は0x40~0x7Eもしくは0x80~0xFCのいずれかとなる。
2バイト目が188通りあることと、ASCII制御文字にあたる0x7Fを避けているのがポイント。
JIS X 0208は1区を94点(=94字)として94区指定できる文字集合(実際に収録されている文字はそれより少ない。)である。
JIS X 0208の文字を表すのに2バイトでそれぞれ94通りを使う代わりに、1バイト目を47通り、2バイト目を188通りとすることで、半角カナを含めた1バイト文字との共存を可能にした。
2バイト目が188通り(=区2個分)あり、区番号が奇数の時は0x40~0x7E、0x80~0x9E、区番号が偶数の時は0x9F~0xFCとなる。
0x7Fを避けるために、区番号が奇数の場合さらなる条件分岐を必要とする。
ちなみにShift_JIS-2004の場合、2バイト文字の1バイト目に0xF0~0xFCの範囲も利用する。
長所・短所
長所
- 既存のASCII・半角カナの文字列と互換性がある。
- 昔の日本語向けの機器なら一番広く対応している。
- 日本語の文章は1文字2バイトで表され、UTF-8よりも効率が良い(UTF-8での日本語は基本1文字3バイト)。
- 半角文字なら1バイト、全角文字は2バイトと、文字の幅とバイト数が対応している。
短所
- 2バイト目が取りうる範囲の一部がASCII文字と被る。そのため文字列の先頭から読み込まなければ正しい解釈が難しい。
- (上記の問題に関連して)半角バックスラッシュ(半角の\,0x5C)はプログラミング上でエスケープ文字に使われるなど特別な働きをする場合があり、これを含む文字(「ソ」「能」など)が不具合を引き起こす可能性がある。俗に「ダメ文字」と言われる。
バックスラッシュ以外にも特別な働きをする記号があり注意が必要。 - 文字コードの変換の際は上述のような複雑な条件分岐を必要とする。
- Shift_JISにコードポイントが存在しない文字もある。例:㍾(U+337E 明治) ㍽(U+337D 大正) ㍼(U+337C 昭和) ㍻(U+337B 平成)はSJISにあるが、㋿(U+32FF 令和)は無い。
利用
MS-DOSが日本語対応する際、Shift_JISを拡張した「MS漢字コード」が採用されたこともあり、Unicodeが普及する前は他のエンコーディング方式を差し置いて最も広く使われていた。
マイクロソフトが拡張して採用したものは後に「CP(コードページ)932」「Windows-31J」などと呼ばれている。
パソコン以外にも携帯電話(ガラケー)、ゲーム機などで使われていた。
ちなみに携帯電話において、Shift_JISで表せられるが文字が収録されていない空き領域に詰め込まれたものが絵文字である。
QRコードも当初はShift_JISでテキストを格納することになっていた(後にUTF-8で格納する実装が増えたが)。
インターネット上における日本語ページの文字エンコーディングの割合も一番高かった。
しかしながらUnicodeが徐々に普及し、それに対応したシステムに置き換わっていくのと同時に、滅多に使われなくなってしまった。
余談
日本語文字集合(特にJIS X 0208)を表現する他の符号化方式として、
- 半角カナの互換性を犠牲にして(別のコードで表される)、2バイトとも0xA1~0xFEの94通りの値を使うEUC-JP
- エスケープシーケンスを駆使して、どの文字集合を使用するか切り替えるISO-2022-JP(JISコード)
などがある。Shift_JISを指すつもりでJISコードと言ってしまうと誤解を与えるので注意。
WindowsにおけるANSI
Windowsのメモ帳で名前を付けて保存を選択したときに文字コードを、「ANSI」「UTF-16 LE」「UTF-16 BE」「UTF-8」「UTF-8 (BOM付き)」の5つから選択することができる(Windows10 21H1時点)。
日本語のテキストファイルは「ANSI」を選択して保存することで、Shift_JISを拡張したCP932で保存することができる。
バッチファイル等を作成する際には、「ANSI」で保存しないとコマンドプロンプト上での日本語の文章が文字化けする。
関連項目
- JIS X 0208 / JIS X 0213
- Unicode
- 文字化け
- 十六進法 (当該記事冒頭のバイト列がShift_JISでエンコーディングしたもの)
- 0
- 0pt