ISO-20220-JP/EUC-JP/Shift-JISなど

概要

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文字ごとにそれぞれエスケープシーケンス0x8E0x8Fを置く。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のバックスラッシュ/¥記号に相当するため、ソースコードの処理などで不都合が生じる、など

 

JIS X 0208

概要

日本語表記のための漢字・図形の符号化文字集合(の規格)。7ビット及び8ビットの2バイトで表現。「7ビット及び8ビットの2バイト情報交換用符号化漢字集合」(7-bit and 8-bit double byte coded KANJI sets for information interchange)。

図形文字は94×94=8834の区点に非漢字524字、第一水準漢字2965字、第二水準漢字3390字の6879字が定義されている。

コード表

構造

JIS X 0208は区(row)と点(cell)の交点に文字を定義する。各区に対して80の点が定義され、1つの文字は「区/点」で表される(コードポイント)。

たとえば1区のコード表は以下のとおり。

+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
1 0 ´ ¨
16 _
32
48 ± ×
64 ÷ °
80 §

 

割当て

1区~8区 記号・英数・かな
16区~47区 第1水準漢字
48区~84区 第2水準漢字

1区~8区の内訳は以下のようになっている。

1~2区 記号
3区 数字、アルファベット
4区 平仮名
5区 片仮名
6区 ギリシャ文字
7区 ロシア文字
8区 罫線文字

JIS X 0208の一部を例示すると以下のとおり。「あ」は4区2点、「愛」は16区6点となる。

区\点 1 2 3 4 5 6 7 8 9 10
2/1 2/2 2/3 2/4 2/5 2/6 2/7 2/8 2/9 2/A
1 2/1
2 2/2
3 2/3
4 2/4
5 2/5
6 2/6 Α Β Γ Δ Ε Ζ Η Θ Ι Κ
7 2/7 А Б В Г Д Е Ё Ж З И
8 2/8
9 2/9
: : : : : : : : : : : :
15 2/F
16 3/0
17 3/1
18 3/2
: : : : : : : : : : : :

参考~JIS X 0208の文字コード

区点の仕組み

区/点と列/行

JIS-X0208は2バイトで文字を表現する。2バイトのうち1バイトを「区」(row)とし、第2バイトを「点」(cell)とする。

1バイトを上位ビットと下位ビットに分け、上位ビットを「列」、下位ビットを「行」とする。

1バイトが7ビットの場合、000|0000~111|1111の128パターンが表現可能だが、このうち34パターンが1バイト文字として先取りされる。このため、区及び点を表現できる1バイトのパターン数は94となる。

列/行

2バイト文字の1バイトのパターンの表現方法。1バイトを上位3 or 4ビット(列)と下位4ビット(行)に分け、それぞれの10進数表記を'/'で区切って「列番号/行番号」とする。たとえば7ビットの場合、011|1011は3/11(3列11行)となる。

1バイトが7ビットの場合、000|0000~111|1111すなわち0/0~7/15で、その数8×16=128が全体のパターン数となる。但し後述のように、このうち34パターンが1バイト文字に先取りされるため、2バイト文字として使用可能なのは128−34→94パターンとなる。

1バイト文字

1バイト文字には以下の34文字(制御文字とSPACE)が予約される。

制御文字

0列(0/0~0/15)と1列(1/0~1/15)の32個の領域には制御文字を配置する(CL領域)。

SPACE

2/0にはSPACE(空白)を配置する。

DELETE

7/15にはDELETE(抹消)を配置する。

7ビット2バイトの場合

上位7ビットを区、下位8ビットの1バイトを点とする。

  • CL領域(0/0~1/15)の制御文字
  • 2/0のSPACE
  • 7/15のDELETE
  • GL領域(2/1~7/14)の図形文字
    →2バイトで94×94区点

8ビット2バイトの場合

8ビット2バイトの場合、7ビット2バイトに対して、1バイト目の最上位ビットが加わる。

最上位ビットが0の場合、7ビット2バイトと同じで、区や点のパターンは0/0~7/15の128パターン。

  • CL領域(0/0~1/15)の制御文字
  • 2/0のSPACE
  • 7/15のDELETE
  • GL領域(2/1~7/14)の図形文字
    →2バイトで94×94区点

一方、1バイト目の最上位ビットが1の場合は、区や点のパターン数は8/0~15/15でパターンを以下のように割り当てる。

  • CR領域(8/0~9/15)の制御文字
  • 10/0、10/15は不使用
  • GR領域(10/1~15/14)の図形文字
    →2バイトで94×94区点

GR領域の考え方はGL領域と同じで、94×94の区点で8836個の文字を配置可能。

 

 

 

JIS X 0201

概要

7ビット及び8ビットの情報交換用符号化文字集合。ラテン文字用図形文字集合と片仮名用図形文字集合のふたつの文字集合からなっている。半角英数、半角カナ。俗称ANKコード (Alphabet Numeric Katakana) 。

このJIS X 0201はJIS X 0208と併せてShift_JISやEUC-JPで用いられる。JIS X 0201の殆どの文字はJIS X 0208の一部と重複するので、半角で表示されることが多い。

文字集合

ラテン文字用図形文字集合

8ビットの場合、0010|0001~0111|1110(0x21~0x7E)の94文字に図形文字を割り当てている。先頭ビットが0で、7ビットでそれ以降のパターンは変わらない。

ASCIIとほぼ同じ並びだが、以下の2つの文字の表現がASCIIと異なる。

  • 5C:\¥
  • 7E:~→ ¯
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
20 ! # $ % & ( ) * * , . /
30 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
40 @ A B C D E F G H I J K L M N O
50 P Q R S T U V W X Y Z [ ¥ ] ^ _
60 ` a b c d e f g h i j k l m n o
70 p q r s t u v w x y z { | } ¯

 

片仮名用図形文字集合

8ビットの1010|0001~1111|1110(0xA1~0xFE)の94文字に図形文字を割り当てている。7ビットの場合は先頭ビットの1を無視する。

半角カタカナや記号として表示される。

+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A0
B0
C0
D0
E0
F0

 

7ビット/8ビット

8ビットの場合は、0x21~0x7Eにラテン文字、0xA1~0xFEに片仮名文字を割り当てる。

7ビットの場合は、SIHT-OUT  (SO, 0x0E)、SHIFT-OUT (SO, 0x0F)でラテン文字とカタカナ文字を切り替える。SO以降は片仮名、SI以降はラテン文字となる。

 

EBCDIC

概要

EBCDIC ( Extended Binary Coded Decimal Interchange Code)は、IBMにより定義された8ビットの文字コード。

BCDの0~9 (0000~1001)を8ビットに拡張し、上位ビットをF (1111)として10進の数値を充てており、アルファベット文字や記号をそれぞれ特定の位置に定義している。

制御文字

EBCDICの制御文字は16進で00~3FとFFに割り当てられている。

FF:EO

00 01 02 03
0 NUL DLE DS (予約)
1 SOH DC1 SOS (予約)
2 STX DC2 FS SYN
3 ETX DC3 WUS IR
4 SEL RES/EMP BYP/IMP PP
5 HT NL LF TRN
6 RNL BS ETB NBS
7 DEL POC ESC EOT
8 GE CAN SA SBS
9 SPS EM SFE IT
A RPT UBS SM/SW RFF
B VT CU1 CSP CU3
C FF IFS MFA DC4
D CR IGS ENQ NAK
E SQ/LS1 IRS ACK (予約)
F SI/LS0 IUS/ITB BEL SUB

図形文字

共通配置

EBCDICの各コードページに共通する配置は以下のとおりで、文字が定義されていない空白位置には、各コードページごとに制御文字や他の印字可能文字が割り当てられる。

 

40 50 60 70 80 90 A0 B0 C0 D0 E0 F0
0 SP & 0
1 / A J 1
2 B K S 2
3 C L T 3
4 D M U 4
5 E N V 5
6 F O W 6
7 G P X 7
8 H Q Y 8
9 I R Z 9
A :
B . , #
C < * % @
D ( ) _
E + ; > =
F ?

カナ拡張

IBMによるカナ拡張の例。

40 50 60 70 80 90 A0 B0 C0 D0 E0 F0
0 SP & 0
1 / a j A J 1
2 b k s B K S 2
3 c l t C L T 3
4 d m u D M U 4
5 e n v E N V 5
6 f o w F O W 6
7 g p x G P X 7
8 h q y H Q Y 8
9 i r z I R Z 9
A :
B . , #
C < * % @
D ( ) _
E + ; > =
F ?

 

 

文字コード/符号化

概要

人が読める文字とマシンが処理できる符号を対応させたものが文字コードで、以下の2つの組み合わせ。

符号化文字集合
Coded Character Set: CCS、キャラクターセット。文字ごとに番号を割り当てられた文字の集合。
文字符号化方式
Character Encoding Scheme: CES、エンコーディングルール。符号化文字集合で定義された番号バイト列に返還するルール。

1バイト系

半角系の文字コードは、CCSのコードがそのままバイト列になる。

マルチバイト系

参考サイト

 

ASCII

概要

ASCII (American Standard Code for Information Interchange) はANSIによって規定されたラテン文字のコード体系。

7ビットの2進数(10進数で0~127、16進数で00~7F)にアルファベットなどのラテン文字や記号、制御コードを割り当てている。

符号化文字集合で割り当てられたコードポイントがそのままバイト列表現であり、文字符号化方式を包含している。

文字コードの構成

16進 10進 対応文字
00~1F 0~31 制御文字
20 32 空白文字
21~7E 33~126 アルファベットなどの図形文字
7F 127 制御文字DEL

文字集合と符合化

制御文字

16進 10進 記号 CS ESC 機能
00 0 NUL ^@ \0 ヌル文字
01 1 SOH ^A ヘッディング開始
02 2 STX ^B テキスト開始
03 3 ETX ^C テキスト終了
04 4 EOT ^D 伝送終了
05 5 ENQ ^E 送信問合せ
06 6 ACK -F 送信承認
07 7 BEL ^G \a ベル
08 8 BS ^H \b 後退
09 9 HT ^I \t 水平タブ
0A 10 LF ^J \n ラインフィード(改行)
0B 11 VT ^K \v 垂直タブ
0C 12 FF ^L \f フォームフィード
0D 13 CR ^M \r 復帰
0E 14 SO ^N シフトアウト
0F 15 SI ^O シフトイン
10 16 DLE ^P 伝送制御拡張
11 17 DC1 ^Q 装置制御1
12 18 DC2 ^R 装置制御2
13 19 DC3 ^S 装置制御3
14 20 DC4 ^T 装置制御4
15 21 NAK ^U 否定非承認
16 22 SYN ^V 同期符号
17 23 ETB ^W 伝送ブロック終結
18 24 CAN ^X キャンセル
19 25 EM ^Y 媒体終端
1A 26 SUB ^Z 文字置換
1B 27 ESC ^[ \e エスケープ
1C 28 FS ^\ ファイル分離
1D 29 GS ^] グループ分離
1E 30 RS ^^ レコード分離
1F 31 US ^_ ユニット分離
7F 127 DEL ^? 削除

DEL~削除

厳密には制御文字ではなく、誤った文字を削除するための文字。穿孔テープの時代に削除したい文字の位置でこの文字を打つと下位7ビット全てが1となり、この文字が読み飛ばされた。

DLE (Data Link Escape)~伝送制御拡張

RFC原文は以下のとおり。このコードの後に続く連続したコード群の意味を変更する。すなわちデータ伝送ネットワーク上ににおいてASCIIコード以外の意味を持たせる場合にのみ用いられる。

A communication control character which will change the meaning of a limited number of contiguously following characters. It is used exclusively to provide supplementary controls in data communication networks.

SYN (Synchronous Idle)~同期符号

キャラクター同期方式で、送信する文字列の前後に付加する同期用の文字符合。

図形文字

各欄の上段が文字の印字表現、中段がコードの16進表記、下段がコードの10進表記。

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
20 SP
20
32
!
21
33

22
34
#
23
35
$
24
36
%
25
37
&
26
38

27
39
(
28
40
)
29
41
*
2A
42
+
2B
43
,
2C
44

2D
45
.
2E
46
/
2F
47
30 0
30
48
1
31
49
2
32
50
3
33
51
4
34
52
5
35
53
6
36
54
7
37
55
8
38
56
9
39
57
:
3A
58
;
3B
59
<
3C
60
=
3D
61
>
3E
62
?
3F
63
40 @
40
64
A
41
65
B
42
66
C
43
67
D
44
68
E
45
69
F
46
70
G
47
71
H
48
72
I
49
73
J
4A
74
K
4B
75
L
4C
76
M
4D
77
N
4E
78
O
4F
79
50 P
50
80
Q
51
81
R
52
82
S
53
83
T
54
84
U
55
85
V
56
86
W
57
87
X
58
88
Y
59
89
Z
5A
90
[
5B
91
\
5C
92
]
5D
93
^
5E
94
_
5F
95
60 `
60
96
a
61
97
b
62
98
c
63
99
d
64
100
e
65
101
f
66
102
g
67
103
h
68
104
i
69
105
j
6A
106
k
6B
107
l
6C
108
m
6D
109
n
6E
110
o
6F
111
70 p
70
112
q
71
113
r
72
114
s
73
115
t
74
116
u
75
117
v
76
118
w
77
119
x
78
120
y
79
121
z
7A
122
(
7B
123
|
7C
124
)
7D
125
~
7E
126

括弧の英語表現

()はopening/closing parenthesis、{}はopening/closing brase、[]はopening/closing bracket

その他の記号の英語表現

!はexclamation point、#はnumber sign、*はasterisk、-はhyphen (minus)、.はperiod (decimal point)、/はslant、@はcommercial at、\はreverse slant、^はcircumflex。

コード全体

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI
10 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS RS GS US
20 SP ! # $ % & ( ) * + , . /
30 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
40 @ A B C D E F G H I J K L M N O
50 P Q R S T U V W X Y Z [ \ ] ^ _
60 ` a b c d e f g h i j k l m n o
70 p q r s t u v w x y z { | } ~ DEL