概要
JIS X 0208の符号化方式として以下の3つを整理する。
- ISO-2022-JP~JISコード
- EUC-JP
- Shift_JIS
ISO-2022-JP
JIS X 0208の符号化
区点番号を16進4桁とし、0x2020を加えて2バイトのバイト列を得る。以下、いくつかの例。
全角文字 | 区点(10進) | 区点(16進) | 符号化後 |
あ | 4/2 | 0x0402 |
24 22 |
さ | 4/21 | 0x0415 |
24 35 |
亜 | 16/1 | 0x1001 |
30 21 |
種 | 28/79 | 0x1C4F |
3C 6F |
エスケープシーケンス
ASCII文字の解釈で始め、ASCIIにエスケープした状態で終了。
以下は文字集合、バッファーとそれに切り替えるためのエスケープシーケンス。
文字集合 | バッファー | 16進 | 文字表記 |
ASCII | G0 | 1B 28 42 |
ESC ( B |
JIS X 0201 | G0 | 1B 28 4A |
ESC ( J |
JIS X 0208 | G0 | 1B 24 42 |
ESC $ B |
例
以下は、「ABアイあい」という文字列のISO-2022-JPによるエンコーディングの結果。
区/点 | バイト表現 | 変換・制御 | バイト列 | |
A | 41 |
41 |
||
B | 42 |
42 |
||
C | 43 |
43 |
||
JIS X 0201 | 1B 28 4A |
|||
ア | B1 |
B1 |
||
イ | B2 |
B2 |
||
JIS X 0208 | 1B 24 42 |
|||
あ | 4/4 | 0404 |
+0x2020 | 24 24 |
い | 4/5 | 0405 |
+0x2020 | 24 25 |
ASCII | 1B 28 42 |
EUC-JP
EUC-JPでは以下のようにエンコードする。
- ASCIIをGL領域、JIS X 0208をGR領域で扱う
- ASCIIは最上位ビットが0でそのままのビットパターン
- JIS X 0208は区点コードに0xA0A0を加えた値となる
- 半角カタカナ(JIS X 0201)はSS2 (Single Sift 2, 0x8E)で1文字ごとにエスケープ
- 補助漢字(JIS X 212)はSS3 (Single Shift 3, 0x8F)で1文字ごとにエスケープ
なお、区の最大値は84(0x54)、点の最大値は95(0x5F)なので、0xA0を加えてもオーバーフローしない。
全角文字 | 区点(10進) | 区点(16進) | 符号化後 |
あ | 4/2 | 0x0402 |
A4 A2 |
さ | 4/21 | 0x0415 |
A4 B5 |
亜 | 16/1 | 0x1001 |
B0 A1 |
種 | 28/79 | 0x1C4F |
BC EF |
エスケープ
JIS X 0201とJIS X 0212の文字の前、1文字ごとにそれぞれエスケープシーケンス0x8E
、0x8F
を置く。ASCIIとJIS X 0208は同居しているので、エスケープシーケンスは必要ない。
以下は文字集合、バッファーとそれに切り替えるためのエスケープシーケンス。ただしJIS X 0201とJIS X 0212へのエスケープの実装は任意。
文字集合 | バッファー | 16進 | 文字表記 |
ASCII | G0 | ||
JIS X 0208 | G1 | ||
JIS X 0201 | G2 | 8E |
SS2 |
JIS X 0212 | G3 | 8F |
SS3 |
例
以下は、「ABアイあい」という文字列のEUC-JPによるエンコーディングの結果。
区/点 | バイト表現 | 変換・制御 | バイト列 | |
A | 41 |
41 |
||
B | 42 |
42 |
||
C | 43 |
43 |
||
JIS X 0201 | 8E |
|||
ア | B1 |
B1 |
||
JIS X 0201 | 8F |
|||
イ | B2 |
B2 |
||
JIS X 0208 | 1B 24 42 |
|||
あ | 4/4 | 0404 |
+0xA0A0 | A4 A4 |
い | 4/5 | 0405 |
+0xA0A0 | A4 A5 |
Shift_JIS
概要
英数字・半角カナ・漢字をエスケープシーケンスなしで1~2バイトの符号空間で表現する。
- 半角英数字と半角カタカナは1バイト
- 日本語の全角文字は2バイト
Shift_JISのシフトは、文字集合を符号空間の空き領域にシフトさせて詰め込んでいることから。
特徴など
- エスケープシーケンス不要
- 符号化後の容量が他と比べて小さい
- JIS X 0208の区点からの変換式が煩雑
- 2バイト目にASCIIコードと同じ符号が現れるため、文字区切りの判定に制約
- 一部の文字に0x5Cが現れ、これがASCIIのバックスラッシュ/¥記号に相当するため、ソースコードの処理などで不都合が生じる、など