...

文字コード

by user

on
Category: Documents
0

views

Report

Comments

Transcript

文字コード
コンピュータ基礎演習�
�ー文字と符号化ー�
岩井�儀雄�
[email protected]�
文字の表現�
 
コンピュータの中では文字は「ビット列」で表現�
 
 
 
キーボード:押された文字に対応するビット列に変換�
ディスプレイ:ビット列に対応する文字を表示�
符号化ー文字をビット列に割当�
 
例えば,�
'A' = 0100 0001 = 0x41�
'B' = 0100 0010 = 0x42�
'C' = 0100 0011 = 0x43�
 
コード(割当ルール)→標準化�
文字コードの標準化�
 
文字コードの標準化を推進する団体�
 
日本:JSA�
 
 
アメリカ:ANSI�
 
 
Japan Standards Association, 日本規格協会�
American National Standards Institute, 米国規格協会�
国際組織:ISO�
 
International Standards Organization, 国際標準化機構�
文字コードの歴史�
 
ASCIIコード制定�
 
 
 
 
 
 
 
1963年6月17日�
情報通信機器間の情報交換用符号�
32個の制御文字�
1個の空白文字�
94個の図形文字�
1個の削除文字�
32+1+94+1=128文字(7ビット)�
ASCII コード表�
000
001
0000
NULL
DLE
0001
SOH
DC1
0010
STX
0011
011
100
101
110
111
0
@
P
`
p
!
1
A
Q
a
q
DC2
"
2
B
R
b
r
ETX
DC3
#
3
C
S
c
s
0100
EOT
DC4
$
4
D
T
d
t
0101
ENQ
NAK
%
5
E
U
e
u
0110
ACK
SYN
&
6
F
V
f
v
0111
BEL
ETB
'
7
G
W
g
w
1000
BS
CAN
(
8
H
X
h
x
1001
HT
EM
)
9
I
Y
i
y
1010
LF
SUB
*
:
J
Z
j
z
1011
VT
ESC
+
;
K
[
k
{
1100
FF
FS
,
<
L
\
l
|
1101
CR
GS
-
=
M
]
m
}
1110
SO
RS
.
>
N
^
n
~
1111
SI
US
/
?
O
_
o
DEL
制御文字領域
010
図形文字領域
ASCII コード表�
0
8
9
A
B
C
D
E
F
0 NULL SOH STX ETX EOT ENQ ACK BEL BS
HT
LF
VT
FF
CR
SO
SI
DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS
GS
RS
US
1
2
3
0
4
1
2
3
4
5
6
7
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
5
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
6
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
7
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL
ISO 646�
 
 
 
 
ISO により 1967年に規定�
世界共通の82文字のBCT (Basic Code
Table)と国毎に変更可能な12箇所の
NUP(National Use Position)の合計94
文字�
ASCIIから一部を抜き出すことで制定�
ASCII = ISO646 IRV�
ISO 646�
0
8
9
A
B
C
D
E
F
0 NULL SOH STX ETX EOT ENQ ACK BEL BS
HT
LF
VT
FF
CR
SO
SI
DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS
GS
RS
US
1
2
3
0
4
5
P
6
7
p
1
2
3
!
"
1
2
3
A
B
Q
4
5
6
7
%
&
'
(
)
*
+
,
-
.
/
4
5
6
7
8
9
:
;
<
=
>
?
C
D
E
F
G
H
I
J
K
L
M
N
O
R
S
T
U
V
W
X
Y
Z
a
b
c
d
e
f
g
h
i
j
q
r
s
t
u
v
w
x
y
z
国毎に自由に設定
_
k
l
m
n
o
DEL
ISO 8859�
 
 
 
8ビットの文字符号�
ASCII文字94文字+96文字�
ISO 8859-1 Latin Alphabet No. 1�
 
 
 
アイスランド語,アイルランド語,イタリア語,英語,オラン
ダ語,スウェーデン語,スペイン語,デンマーク語,ドイツ
語,ノルウェー語,ポルトガル語,フィンランド語,フェロー
語,フランス語�
ISO 8859-2 Latin Alphabet No. 2�
ISO 8859-10 まである.�
ISO 8859-1 (ASCII互換部分)�
0
8
9
A
B
C
D
E
F
0 NULL SOH STX ETX EOT ENQ ACK BEL BS
HT
LF
VT
FF
CR
SO
SI
DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS
GS
RS
US
1
2
3
0
4
1
2
3
4
5
6
7
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
5
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
6
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
7
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL
ISO 8859-1�
0
1
2
3
¡
¢
£
4
5
6
7
8
9
¨
©
A
B
C
8
9
A
B
C
D
E
F
3
¥
´
¬
D
E
F
文字コードの多様化�
 
 
 
 
1文字当たり7ビットで表現する規格が国際標
準化�
7→8ビットに拡張�
日本では,漢字を利用するため8ビットでは足
らない�
マルチバイトによる文字の表現�
日本国内で利用される規格�
 
ISO(国際標準化機構)�
 
 
 
 
ISO 646�
ISO 2022�
ISO 10646 UCS; Universal Multiple-Octet Coded Character Set�
JSA(日本規格協会)�
 
 
 
 
 
 
JIS X0201 7ビット及び8ビットの情報交換用符号文字集合�
JIS X0202 文字符号の構造及び拡張法(ISO2022)�
JIS X0208 �
JIS X0212 補助漢字�
JIS X0213 拡張漢字集合�
JIS X0221 国際符号化文字集合(ISO10646)�
国内で代表的な符号化方式�
 
ISO-2022-JP �
 
 
ISO-2022-JP-1�
 
 
JIS X0201, JIS X0208,�
EUC-JP (日本語EUC)�
 
 
ISO-2022-JP に加え,JIS X0212�
CP932 (MS漢字コード,シフトJIS)�
 
 
ASCII, JIS X0201, JIS X0208�
ASCII, JIS X0208, JIS X0201, JISX0212�
Unicode (UTF-8, UTF-16)�
 
JIS X0221�
JIS X0201�
 
 
 
 
ISO 646 の日本バージョン�
JSAにより1969年に規定�
ASCIIを模倣したローマ字と日本語表記用
に新たに追加したカナ文字から構成�
ローマ字コード(ISO 646 の NUP)�
 
 
ISO646 IRV の5C「\」を「¥」に�
7E「~」を「¯」に変更��
JIS X0201 (ローマ字)�
0
8
9
A
B
C
D
E
F
0 NULL SOH STX ETX EOT ENQ ACK BEL BS
HT
LF
VT
FF
CR
SO
SI
DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS
GS
RS
US
1
2
3
0
4
1
2
3
4
5
6
7
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
5
P
Q
R
S
T
U
V
W
X
Y
Z
[
¥
]
^
_
6
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
7
p
q
r
s
t
u
v
w
x
y
z
{
|
}
¯
DEL
JIS X0201 (カナ文字)�
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
。
「
」
、
・
ヲ
ァ
ィ
ゥ
ェ
ォ
ャ
ュ
ョ
ッ
8
9
A
B
ー
ア
イ
ウ
エ
オ
カ
キ
ク
ケ
コ
サ
シ
ス
セ
ソ
C
タ
チ
ツ
テ
ト
ナ
ニ
ヌ
ネ
ノ
ハ
ヒ
フ
ヘ
ホ
マ
D
ミ
ム
メ
モ
ヤ
ユ
ヨ
ラ
リ
ル
レ
ロ
ワ
ン
゛
゜
E
F
未定義
JIS X0208 (JIS基本漢字)�
 
 
ISO 2022 の枠内で漢字をコード化するため,2つの番号
(区点番号)で1つの文字を表す方式�
GL,GR面には,94(96)文字利用可能なので,2バイト利
用して �
 
 
 
 
 
94 94=8836文字(現在は6355文字)�
符号表の横行を「区」(1区 94区)�
符号表の縦列を「点」(1点 94点)�
区を1バイト目,点を2バイト目とし,1区 94区を
33~126,1点 94点を33~126として符号化�
JIS補助漢字,JIS拡張漢字も同様のコード化ルール�
JIS X0208 (コード例)�
点
1
1
区
41
64
94
例えば,
「符」=41区68点
41+32 = 73 = 0x49
68+32 =100= 0x64
JIS X0208 コードは
0x4964
となる.
94
ISO 2022�
 
 
 
エスケープシーケンス(ESC から始まる一
連のバイト列)により文字を拡張するための
規格�
7ビットと8ビットの2種類の拡張方法�
JIS X0202 が ISO2022に対応�
ISO2022�
 
 
ESCシーケンスにより
G0~G3に文字集合
の指示�
ロッキング・シングルシ
フトによりGL,GRに
G0~G3を呼び出し�
ISO2022�
 
G0面への日本語文字集合の指示例�
文字集合�
指示面�
ESC シーケンス�
JIS X0208-1983�
G0�
ESC 02/4 04/2�
ESC $ B�
ISO 646-USA�
(ASCII)�
G0�
ESC 02/8 04/2�
ESC ( B�
ISO 646-Japan�
(JIS Roman)�
G0�
ESC 02/8 04/10�
ESC ( J�
JIS X0212-1990�
G0�
ESC 02/4 02/8 04/4�
ESC $ ( D�
ISO 2022-JP�
 
ISO 2022 �
 
 
 
 
柔軟な多言語対応符号化�
柔軟過ぎる→実装が困難�
あらかじめ文字集合を指示したり,取り決めをして
おいて実装の負荷を減らす.�
日本語用の ISO 2022 実装の一つとして�
 
 
ISO-2022-JP が作られた�
主にインターネットにおけるメールのやり取り�
ISO 2022-JP 符号化例�
例えば,�
� ISO符号化例�
  だと�
 
文字
I
S
O
機能・区点
04/09
05/03
04/0F
04/09
05/03
04/0F
01/0B
02/04
04/02
04/09
06/04
03/09
06/06
03/02
03/0D
04/0E
06/03
01/0B
02/08
04/02
00/0A
I
S
O
ESC
$
B
I
d
9
f
2
=
N
c
ESC
(
B
LF
符号
JIS X0208 を指示
符
号
化
例
41-68
25-70
18-29
46-67
ISO646 USA を指示
日本語EUC (EUC-JP)�
 
 
 
 
UNIX系OSの標準的な日本語コード�
Extended Unix Code の略�
ISO 2022 に準拠,複数文字の共存�
必要に応じて制御文字で切り替え�
 
 
 
 
 
 
 
G0 - ASCII�
G1 - JIS X0208�
G2 - JIS X0201�
G3 - JIS X0212�
GLにG0,GRにG1,必要に応じてG2/G3をシングルシフト2/3によ
りGRに呼び出す.�
シングルシフト2=08/14, SS2 (0x8E)�
シングルシフト3=08/15, SS3 (0x8F)�
日本語EUC 符号化例�
 
例えば,�
EUC符号化例�
文字
符号
E
U
C
45
55
43
E
U
C
符
C9
号
E4
41-68
B9
化
E6
25-70
B2
例
BD
18-29
CE
E3
46-67
0A
LF
ISO 10646 (UCS)�
 
2バイトコードで全世界の文字を表現�
 
 
 
日中韓の似ている漢字を統合�
 
 
 
早々に破綻(UCS-2)�
31ビットを使用(UCS-4)�
統合基準が曖昧�
ISO 2022と互換性無し�
JIS X0221が国内の対応規格�
JIS X0221�
 
 
 
ISO 10646 の日本版�
群0x00~0x7F,128個の面からなる�
面は256x256の点からなる�
群オクテット�
面のオクテット�
区オクテット�
点オクテット�
4オクテット(=バイト)からなる
UTF-8�
 
 
 
 
UTF = UCS Transformation Format�
UCS は内部処理用文字コード(wide character = 固
定バイト文字)として考えられたため,データ交換用の
符号化が必要�
ASCIIと互換性を持たせたまま,ASCII以外の文字を
2~6バイトのコードに変換�
文字境界が分かりやすい�
 
 
1バイト目=0xxx xxxx または 11xx xxxx�
2バイト目以降=10xx xxxx�
UTF-8 符号化例�
 
例えば,�
UTF符号化例�
文字
符号
U
T
F
55
54
46
U
T
F
符
E7
AC
7B26
号
A6
E5
8F
化
B7
E5
53F7
8C
5316
例
96
E4
BE
8B
4F8B
符=00 00 7B 26 = 0000 0000 0000 0000 0111 1011 0010 0110
1110 0111 1010 1100 1010 0110
E
7
A
C
A
6
0A
LF
C言語の文字処理�
 
 
 
 
char = 1バイト�
1バイト文字コードであればバイト数=文字数�
マルチバイト文字であれば?�
wchar_t ,wide character�
 
 
 
マルチバイト用文字の内部処理用�
1文字=1wchar_t (内部的には32ビット)�
文字の区切り,文字数が数えやすく,処理がしやすい.�
改行コード�
 
制御文字の一種�
 
CR キャッリジリターン�
 
 
LF ラインフィード�
 
 
印字ヘッドを先頭に戻す�
紙を一行分送る�
計算機により改行コードも異なる�
 
 
 
UNIX (Linux): LF (0x0A)�
Windows: CR+LF (0x0D 0x0A)�
Macintosh: CR (0x0D)�
Fly UP