14. 字符编码标准
=控制字符(control character)
=功能字符(function code,function character)
对于ASCII中的控制字符,都包括哪些,以及每个字符的详细含义,第 2.1.2.1 节 “ASCII字
符集中的功能/控制字符”中会有详细介绍。
2.1.2.1. ASCII字符集中的功能/控制字符
2.1.2.1.1. 什么是Function Code功能码或 Function Character功能字符
ASCII字符集,大家都知道吧,最基本的包含了128个字符。其中前32个,0-31,即0x00-0x1F,都是
不可见字符。这些字符,就叫做控制字符。
这些字符没法打印出来,但是每个字符,都对应着一个特殊的控制功能的字符,简称功能字符或功能码
Function Code。
简言之:ASCII中前32个字符,统称为Function Code功能字符。
此外,由于ASCII中的127对应的是Delete,也是不可见的,所以,此处根据笔者的理解,也可以归为
Function Code。
此类字符,对应不同的“功能”,起到一定的“控制作用”,所以,称为控制字符。
关于每个控制字符的控制功能缩写,参见表 2.1 “ASCII中的控制字符”
表 2.1. ASCII中的控制字符
十进制
十六进制
控制字符
转义字
符
说明
Ctrl + 下
列字母
0
00
NUL
0
Null character(空字符)
@
1
01
SOH
Start of Header(标题开始)
A
2
02
STX
Start of Text(正文开始)
B
3
03
ETX
End of Text(正文结束)
C
4
04
EOT
End of Transmission(传输结束)
D
5
05
ENQ
Enquiry(请求)
E
6
06
ACK
Acknowledgment(收到通知/响应)
F
7
07
BEL
a
Bell(响铃)
G
8
08
BS
b
Backspace(退格)
H
9
09
HT
t
Horizontal Tab(水平制表符)
I
10
0A
LF
n
Line feed(换行键)
J
11
0B
VT
v
Vertical Tab(垂直制表符)
K
12
0C
FF
f
Form feed(换页键)
L
13
0D
CR
r
Carriage return(回车键)
M
14
0E
SO
Shift Out(不用切换)
N
15
0F
SI
Shift In(启用切换)
O
16
10
DLE
Data Link Escape(数据链路转义)
P
17
11
DC1
Device
Control
XON(Transmit On)
18
12
DC2
Device Control 2(设备控制2)
19
13
DC3
Device
Control
XOFF(Transmit Off)
1(设备控制1)
3(设备控制3)
/ Q
R
/ S
6
15. 字符编码标准
十进制
十六进制
控制字符
20
14
21
转义字
符
说明
Ctrl + 下
列字母
DC4
Device Control 4(设备控制4)
T
15
NAK
Negative Acknowledgement(拒绝接收/无 U
响应)
22
16
SYN
Synchronous Idle(同步空闲)
V
23
17
ETB
End of Trans the Block(传输块结束)
W
24
18
CAN
Cancel(取消)
X
25
19
EM
End of Medium(已到介质末端/介质存储已 Y
满)
26
1A
SUB
Substitute(替补/替换)
Z
27
1B
ESC
Escape(溢出/逃离/取消)
[
28
1C
FS
File Separator(文件分割符)
29
1D
GS
Group Separator(分组符)
]
30
1E
RS
Record Separator(记录分隔符)
^
31
1F
US
Unit Separator(单元分隔符)
_
32
20
SP
White space
[Space]
127
7F
DEL
Delete(删除)
?
e
即在C语言中或其他地方如何表示。
可以通过 “Ctrl+对应字母/按键”实现上述控制字符的输入
下面列举一些你可能遇到的情况:
• 用Ctrl+V输入[SYNC]
• 用Ctrl+M输入[Enter]
当然也可以直接用Enter键,但是在Windows下面,其会发送两个字符:CR和LF
关于CR,LF,详情参考:【详解】回车 换行 0x0D 0x0A CR LF r n的来龙去脉
1
• 用Ctrl+Q输入XON
• 用Ctrl+S输入XOFF
注意此处想要在键盘上输入这三个字符的话,是需要通过Shift加上对应字符才能输入的:
• @:用Shift + 2输入
• ^:用Shift + 6输入
• _:用Shift + -输入
32=0x20,对应的是空格(Blank Space)键。不需要加Ctrl键,即可直接通过键盘上的空格键输
入。
127=0x7F=删除(Delete)键;,除了可以用键盘上的删除键输入,也可以用'Ctrl+?'输入。
2.1.2.1.2. ASCII中的Function/Control Code功能字符的详细含义
2.1.2.1.2.1. 0 – NUL – NULl 字符/空字符
ASCII字符集中的空字符,NULL,起初本意可以看作为NOP(中文意为空操作,就是啥都不做的意
思),此位置可以忽略一个字符。
1
http://www.crifan.com/detailed_carriage_return_0x0d_0x0a_cr_lf__r__n_the_context/
7
16. 字符编码标准
之所以有这个空字符,主要是用于计算机早期的记录信息的纸带,此处留个NUL字符,意思是先占这个
位置,以待后用,比如你哪天想起来了,在这个位置在放一个别的啥字符之类的。
后来呢,NUL字符被用于C语言中,字符串的终结符,当一个字符串中间出现NUL / NULL,代码里面
表现为0,的时候,就意味着这个是一个字符串的结尾了。这样就方便按照自己需求去定义字符串,多
长都行,当然只要你内存放得下,然后最后加一个0, 即空字符,意思是当前字符串到此结束。
2.1.2.1.2.2. 1 – SOH – Start Of Heading 标题开始
如果信息沟通交流主要以命令和消息的形式的话,SOH就可以用于标记每个消息的开始。
1963年,最开始ASCII标准中,把此字符定义为Start
Heading。
of
Message,后来又改为现在的Start
Of
现在,这个SOH常见于主从(master-slave)模式的RS232的通信中,一个主设备,以SOH开头,和
从设备进行通信。这样方便从设备在数据传输出现错误的时候,在下一次通信之前,去实现重新同步
(resynchronize)。如果没有一个清晰的类似于SOH这样的标记,去标记每个命令的起始或开头的
话,那么重新同步,就很难实现了。
2.1.2.1.2.3. 2 – STX,3 – ETX
2 – STX – Start Of Text 文本开始
3 – ETX – End Of Text 文本结束
通过某种通讯协议去传输的一个数据(包),称为一帧的话,常会包含一个帧头,包含了寻址信息,即
你是要发给谁,要发送到目的地是哪里,其后跟着真正要发送的数据内容。
而STX,就用于标记这个数据内容的开始。接下来是要传输的数据,最后是ETX,表明数据的结束。
其中,中间具体传输的数据内容,ASCII规范并没有去定义,其和你所用的传输协议,具体自己要传什
么数据有关。
帧头
SOH(表明帧头开 ......(帧头信息,比 STX(表明数据开
始)
如包含了目的地
始)
址,表明你发送给
谁等等)
数据或文本内容
......(真正要传输的 ETX(表明数据结
数据)
束
不过其中有趣的是,1963年,ASCII标准最初版本的时候,把现在的STX叫做EOA(End
Address),ETX叫做(End Of Message)。
Of
这是因为,最早的时候,一个消息中,总是包含一个开始符和一个终止符。现在的新的定义,使得可以
去发送一个固定长度的命令,而只用一个SOH表明帧头开始即可,而不需要再加上一个命令终止符或
帧头结束符。
总结一下:
一般发送一个消息,包含了一个帧头和后面真正要传的数据。
而对于帧头,属于控制类的信息,这部分之前属于命令,后面的真实要传的数据属于数据。即消息=帧
头+数据。
而之前的命令都要有个开始符和结束符,这样就是:
消息
8
45. 编码相关的表格
A.3.1.2. OEM Code Page表
OEM的Code Page如下:
表 A.4. OEM的Code Page
代码页Code Page
对应的字符集Character Set
Code Page 437
original IBM PC Code Page==USA
Code Page 720
Arabic
Code Page 737
Greek
Code Page 775
Estonian, Lithuanian and Latvian
Code Page 850
"Multilingual (Latin-1)" (Western European languages)
Code Page 852
"Slavic (Latin-2)" (Central and Eastern European languages)
Code Page 855
Cyrillic
Code Page 857
Turkish
Code Page 858
"Multilingual" with euro symbol
Code Page 860
Portuguese
Code Page 861
Icelandic
Code Page 862
Hebrew
Code Page 863
French (Quebec French)
Code Page 865
Danish/Norwegian Differs from 437
Code Page 869
Greek
Code Page 874
Thai
A.3.1.3. ANSI和OEM共有的Code Page表
ANSI和OEM共有Code Page,是一些DBCS (Double Byte Character Set) Codepages,即双字节字
符集的代码页。
表 A.5. ANSI和OEM共有的DBCS Code Page
代码页Code Page
对应的字符集Character Set
Code Page 932
Japanese
Code Page 936
GBK - Simplified Chinese
Code Page 949
Korean
Code Page 950
BIG5 - Traditional Chinese
A.3.1.4. 其他一些常见的Code Page表
其他一些常见的Code Page如下:
表 A.6. 一些常见的Code Page
代码页Code Page
对应的字符集Character Set
Code Page 1200
UTF-16LE Unicode little-endian
Code Page 1201
UTF-16BE Unicode big-endian
Code Page 65000
UTF-7 Unicode
Code Page 65001
UTF-8 Unicode
37
46. 编码相关的表格
代码页Code Page
对应的字符集Character Set
Code Page 10000
Macintosh Roman encoding (followed by several other Mac
character sets)
Code Page 10007
Macintosh Cyrillic encoding
Code Page 10029
Macintosh Central European encoding
Code Page 20127
US-ASCII The classic US 7 bit character set with no char larger
than 127
Code Page 28591
ISO-8859-1 (followed by ISO-8859-2 to ISO-8859-15)
A.3.2. 所有的Code Page相关的表格
表 A.7. 微软的代码页标识符(Code Page Identifiers)
Identifier.NET Name
Additional information
037
IBM037
IBM EBCDIC US-Canada
437
IBM437
OEM United States
500
IBM500
IBM EBCDIC International
708
ASMO-708
Arabic (ASMO 708)
709
Arabic (ASMO-449+, BCON V4)
710
Arabic - Transparent Arabic
720
DOS-720
Arabic (Transparent ASMO); Arabic (DOS)
737
ibm737
OEM Greek (formerly 437G); Greek (DOS)
775
ibm775
OEM Baltic; Baltic (DOS)
850
ibm850
OEM Multilingual Latin 1; Western European (DOS)
852
ibm852
OEM Latin 2; Central European (DOS)
855
IBM855
OEM Cyrillic (primarily Russian)
857
ibm857
OEM Turkish; Turkish (DOS)
858
IBM00858
OEM Multilingual Latin 1 + Euro symbol
860
IBM860
OEM Portuguese; Portuguese (DOS)
861
ibm861
OEM Icelandic; Icelandic (DOS)
862
DOS-862
OEM Hebrew; Hebrew (DOS)
863
IBM863
OEM French Canadian; French Canadian (DOS)
864
IBM864
OEM Arabic; Arabic (864)
865
IBM865
OEM Nordic; Nordic (DOS)
866
cp866
OEM Russian; Cyrillic (DOS)
869
ibm869
OEM Modern Greek; Greek, Modern (DOS)
870
IBM870
IBM EBCDIC Multilingual/ROECE
Multilingual Latin 2
874
windows-874
ANSI/OEM Thai (same as 28605, ISO 8859-15); Thai (Windows)
875
cp875
IBM EBCDIC Greek Modern
932
shift_jis
ANSI/OEM Japanese; Japanese (Shift-JIS)
936
gb2312
ANSI/OEM Simplified
Simplified (GB2312)
949
ks_c_5601-1987
ANSI/OEM Korean (Unified Hangul Code)
Chinese
(Latin
(PRC,
2);
IBM
Singapore);
EBCDIC
Chinese
38
47. 编码相关的表格
Identifier.NET Name
Additional information
950
big5
ANSI/OEM Traditional Chinese (Taiwan; Hong Kong SAR, PRC);
Chinese Traditional (Big5)
1026
IBM1026
IBM EBCDIC Turkish (Latin 5)
1047
IBM01047
IBM EBCDIC Latin 1/Open System
1140
IBM01140
IBM EBCDIC US-Canada (037 + Euro symbol); IBM EBCDIC (USCanada-Euro)
1141
IBM01141
IBM EBCDIC Germany (20273 + Euro symbol); IBM EBCDIC
(Germany-Euro)
1142
IBM01142
IBM EBCDIC Denmark-Norway (20277 + Euro symbol); IBM
EBCDIC (Denmark-Norway-Euro)
1143
IBM01143
IBM EBCDIC Finland-Sweden (20278 + Euro symbol); IBM EBCDIC
(Finland-Sweden-Euro)
1144
IBM01144
IBM EBCDIC Italy (20280 + Euro symbol); IBM EBCDIC (Italy-Euro)
1145
IBM01145
IBM EBCDIC Latin America-Spain (20284 + Euro symbol); IBM
EBCDIC (Spain-Euro)
1146
IBM01146
IBM EBCDIC United Kingdom (20285 + Euro symbol); IBM EBCDIC
(UK-Euro)
1147
IBM01147
IBM EBCDIC France (20297 + Euro symbol); IBM EBCDIC (FranceEuro)
1148
IBM01148
IBM EBCDIC International (500 + Euro symbol); IBM EBCDIC
(International-Euro)
1149
IBM01149
IBM EBCDIC Icelandic (20871 + Euro symbol); IBM EBCDIC
(Icelandic-Euro)
1200
utf-16
Unicode UTF-16, little endian byte order (BMP of ISO 10646);
available only to managed applications
1201
unicodeFFFE
Unicode UTF-16, big endian byte order; available only to managed
applications
1250
windows-1250
ANSI Central European; Central European (Windows)
1251
windows-1251
ANSI Cyrillic; Cyrillic (Windows)
1252
windows-1252
ANSI Latin 1; Western European (Windows)
1253
windows-1253
ANSI Greek; Greek (Windows)
1254
windows-1254
ANSI Turkish; Turkish (Windows)
1255
windows-1255
ANSI Hebrew; Hebrew (Windows)
1256
windows-1256
ANSI Arabic; Arabic (Windows)
1257
windows-1257
ANSI Baltic; Baltic (Windows)
1258
windows-1258
ANSI/OEM Vietnamese; Vietnamese (Windows)
1361
Johab
Korean (Johab)
10000
macintosh
MAC Roman; Western European (Mac)
10001
x-mac-japanese
Japanese (Mac)
10002
x-macchinesetrad
MAC Traditional Chinese (Big5); Chinese Traditional (Mac)
10003
x-mac-korean
Korean (Mac)
10004
x-mac-arabic
Arabic (Mac)
10005
x-mac-hebrew
Hebrew (Mac)
39
48. 编码相关的表格
Identifier.NET Name
Additional information
10006
x-mac-greek
Greek (Mac)
10007
x-mac-cyrillic
Cyrillic (Mac)
10008
x-macchinesesimp
MAC Simplified Chinese (GB 2312); Chinese Simplified (Mac)
10010
x-mac-romanian
Romanian (Mac)
10017
x-mac-ukrainian
Ukrainian (Mac)
10021
x-mac-thai
Thai (Mac)
10029
x-mac-ce
MAC Latin 2; Central European (Mac)
10079
x-mac-icelandic
Icelandic (Mac)
10081
x-mac-turkish
Turkish (Mac)
10082
x-mac-croatian
Croatian (Mac)
12000
utf-32
Unicode UTF-32, little endian byte order; available only to
managed applications
12001
utf-32BE
Unicode UTF-32, big endian byte order; available only to managed
applications
20000
x-Chinese_CNS
CNS Taiwan; Chinese Traditional (CNS)
20001
x-cp20001
TCA Taiwan
20002
x_Chinese-Eten
Eten Taiwan; Chinese Traditional (Eten)
20003
x-cp20003
IBM5550 Taiwan
20004
x-cp20004
TeleText Taiwan
20005
x-cp20005
Wang Taiwan
20105
x-IA5
IA5 (IRV International Alphabet No. 5, 7-bit); Western European
(IA5)
20106
x-IA5-German
IA5 German (7-bit)
20107
x-IA5-Swedish
IA5 Swedish (7-bit)
20108
x-IA5-Norwegian IA5 Norwegian (7-bit)
20127
us-ascii
US-ASCII (7-bit)
20261
x-cp20261
T.61
20269
x-cp20269
ISO 6937 Non-Spacing Accent
20273
IBM273
IBM EBCDIC Germany
20277
IBM277
IBM EBCDIC Denmark-Norway
20278
IBM278
IBM EBCDIC Finland-Sweden
20280
IBM280
IBM EBCDIC Italy
20284
IBM284
IBM EBCDIC Latin America-Spain
20285
IBM285
IBM EBCDIC United Kingdom
20290
IBM290
IBM EBCDIC Japanese Katakana Extended
20297
IBM297
IBM EBCDIC France
20420
IBM420
IBM EBCDIC Arabic
20423
IBM423
IBM EBCDIC Greek
20424
IBM424
IBM EBCDIC Hebrew
20833
x-EBCDICKoreanExtended
IBM EBCDIC Korean Extended
40
49. 编码相关的表格
Identifier.NET Name
Additional information
20838
IBM-Thai
IBM EBCDIC Thai
20866
koi8-r
Russian (KOI8-R); Cyrillic (KOI8-R)
20871
IBM871
IBM EBCDIC Icelandic
20880
IBM880
IBM EBCDIC Cyrillic Russian
20905
IBM905
IBM EBCDIC Turkish
20924
IBM00924
IBM EBCDIC Latin 1/Open System (1047 + Euro symbol)
20932
EUC-JP
Japanese (JIS 0208-1990 and 0121-1990)
20936
x-cp20936
Simplified Chinese (GB2312); Chinese Simplified (GB2312-80)
20949
x-cp20949
Korean Wansung
21025
cp1025
IBM EBCDIC Cyrillic Serbian-Bulgarian
21027
(deprecated)
21866
koi8-u
Ukrainian (KOI8-U); Cyrillic (KOI8-U)
28591
iso-8859-1
ISO 8859-1 Latin 1; Western European (ISO)
28592
iso-8859-2
ISO 8859-2 Central European; Central European (ISO)
28593
iso-8859-3
ISO 8859-3 Latin 3
28594
iso-8859-4
ISO 8859-4 Baltic
28595
iso-8859-5
ISO 8859-5 Cyrillic
28596
iso-8859-6
ISO 8859-6 Arabic
28597
iso-8859-7
ISO 8859-7 Greek
28598
iso-8859-8
ISO 8859-8 Hebrew; Hebrew (ISO-Visual)
28599
iso-8859-9
ISO 8859-9 Turkish
28603
iso-8859-13
ISO 8859-13 Estonian
28605
iso-8859-15
ISO 8859-15 Latin 9
29001
x-Europa
Europa 3
38598
iso-8859-8-i
ISO 8859-8 Hebrew; Hebrew (ISO-Logical)
50220
iso-2022-jp
ISO 2022 Japanese with no halfwidth Katakana; Japanese (JIS)
50221
csISO2022JP
ISO 2022 Japanese with halfwidth Katakana; Japanese (JIS-Allow
1 byte Kana)
50222
iso-2022-jp
ISO 2022 Japanese JIS X 0201-1989; Japanese (JIS-Allow 1 byte
Kana - SO/SI)
50225
iso-2022-kr
ISO 2022 Korean
50227
x-cp50227
ISO 2022 Simplified Chinese; Chinese Simplified (ISO 2022)
50229
ISO 2022 Traditional Chinese
50930
EBCDIC Japanese (Katakana) Extended
50931
EBCDIC US-Canada and Japanese
50933
EBCDIC Korean Extended and Korean
50935
EBCDIC Simplified Chinese Extended and Simplified Chinese
50936
EBCDIC Simplified Chinese
50937
EBCDIC US-Canada and Traditional Chinese
50939
EBCDIC Japanese (Latin) Extended and Japanese
51932
euc-jp
EUC Japanese
41