字符编码详解

版本:v2.3.1

Crifan Li

摘要

本文主要介绍了字符编码的基础知识,以及常见的字符编码类型,比如ASCII,Unicode,UTF-8,ISO 8859等,以及各种编码之间的关系,同时专门解释了中文字符相关的编码标准,包括GB2312,GBK,GB18030,也专门解释了Windows系统中的Code Page,以及相关的BOM等内容

[提示] 本文提供多种格式供:
在线阅读 HTML HTMLs PDF CHM TXT RTF WEBHELP
下载(7zip压缩包) HTML HTMLs PDF CHM TXT RTF WEBHELP

HTML版本的在线地址为:

http://www.crifan.com/files/doc/docbook/char_encoding/release/html/char_encoding.html

有任何意见,建议,提交bug等,都欢迎去讨论组发帖讨论:

http://www.crifan.com/bbs/categories/char_encoding/

2015-05-24

修订历史
修订 2.3.1 2015-05-24 crl
  1. 通过Docbook发布
  2. 合并了原先在zhcn_charset中的内容
  3. 详细解释了Code Page
  4. 详细解释了ANSI编码
  5. 解释BOM
  6. 添加很多xml:id
  7. 添加常见字符英文读法和字符编码简明教程的链接
  8. 添加字符编码应用的链接
修订 1.0 2011-11-02 crl
  1. 添加了编码相关背景知识介绍
  2. 添加了ASCII和EASCII编码介绍
  3. 添加了ISO/IEC 8859相关的编码和各种单字节编码的关系
  4. 添加了Unicode和ISO 10646的解释
  5. 添加了UTF-8和Unicode的区别和联系

目录

缩略词
正文之前
1. 目的
2. 本文内容
3. 声明
1. 字符编码相关的背景知识
1.1. 拉丁字母
1.1.1. 我们的目标
1.2. 什么是字符编码
2. 字符编码标准
2.1. 只支持基本的拉丁字符的字符编码:ASCII
2.1.1. ASCII的由来
2.1.2. ASCII编码规则
2.1.2.1. ASCII字符集中的功能/控制字符
2.1.2.1.1. 什么是Function Code功能码或 Function Character功能字符
2.1.2.1.2. ASCII中的Function/Control Code功能字符的详细含义
2.1.2.1.2.1. 0 – NUL – NULl 字符/空字符
2.1.2.1.2.2. 1 – SOH – Start Of Heading 标题开始
2.1.2.1.2.3. 2 – STX,3 – ETX
2.1.2.1.2.4. 4 – EOT – End Of Transmission 传输结束
2.1.2.1.2.5. 5 – ENQ – ENQuiry 请求
2.1.2.1.2.6. 6 – ACK – ACKnowledgment 回应/响应
2.1.2.1.2.7. 7 – BEL – [audible] BELl
2.1.2.1.2.8. 8 – BS – BackSpace 退格键
2.1.2.1.2.9. 9 – HT – Horizontal Tab 水平制表符
2.1.2.1.2.10. 10 – LF – Line Feed 换行
2.1.2.1.2.11. 11 – VT – Vertical Tab 垂直制表符
2.1.2.1.2.12. 12 – FF – Form Feed 换页
2.1.2.1.2.13. 13 – CR – Carriage return 机器的滑动部分/底座 返回 -> 回车
2.1.2.1.2.14. 14 – SO,15 – SI
2.1.2.1.2.15. 16 – DLE – Data Link Escape 数据链路转义
2.1.2.1.2.16. 17 – DC1 – Device Control 1 / XON – Transmission on
2.1.2.1.2.17. 18 – DC2 – Device Control 2
2.1.2.1.2.18. 19 – DC3 – Device Control 3 / XOFF – Transmission off 传输中断
2.1.2.1.2.19. 20 – DC4 – Device Control 4
2.1.2.1.2.20. 21 – NAK – Negative AcKnowledgment 负面响应-> 无响应, 非正常响应
2.1.2.1.2.21. 22 – SYN – SYNchronous idle
2.1.2.1.2.22. 23 – ETB – End of Transmission Block 块传输中止
2.1.2.1.2.23. 24 – CAN – CANcel 取消
2.1.2.1.2.24. 25 – EM – End of Medium 已到介质末端,介质存储已满
2.1.2.1.2.25. 26 – SUB – SUBstitute character替补/替换
2.1.2.1.2.26. 27 – ESC – ESCape 逃离/取消
2.1.2.1.2.27. 28 – FS – File Separator 文件分隔符
2.1.2.1.2.28. 29 – GS – Group Separator分组符
2.1.2.1.2.29. 30 – RS – Record Separator记录分隔符
2.1.2.1.2.30. 31 – US – Unit Separator 单元分隔符
2.1.2.1.2.31. 32 – SP – White SPace 空格键
2.1.2.1.2.32. 127 – DEL – DELete 删除
2.1.2.1.3. 各种字符的标准的读法/叫法
2.1.3. ISO 646
2.2. 支持多种衍生拉丁字母的字符编码:EASCII和ISO 8859
2.2.1. EASCII
2.2.2. ISO 8859
2.2.2.1. ISO/IEC 8859出现的背景
2.2.2.2. ISO/IEC 8859的编码规则
2.2.2.3. ISO/IEC 8859的特点
2.2.2.4. ISO/IEC 6429
2.2.2.5. ISO 8859和ISO-8859的区别和联系
2.2.2.5.1. 原先的ISO 8859-1和我们常说的ISO 8859-1
2.3. 各种单字节编码标准的关系
2.4. 支持世界上几乎所有字符的字符编码:Unicode
2.4.1. Unicode和ISO 10646的关系
2.4.1.1. ISO 10646=UCS
2.4.1.2. Unicode 和ISO 10646的联系
2.4.1.3. Unicode和ISO 10646的区别
2.4.2. Unicode编码规则
2.4.3. Unicode字符编码所对应的存储和交换标准:UTF-8, UTF-16, UTF-32
2.4.3.1. UTF-8
2.4.3.2. Unicode与UTF-8之间的转换
2.4.3.2.1. 关于UTF-8的BOM:“EF BB BF”
2.5. 代码页Code Page
2.5.1. 什么是代码页(Code Page)
2.5.2. Windows中的Code Page
2.5.2.1. Windows中的Code Page分类:ANSI和OEM
2.5.2.1.1. Windows的ANSI Code Page表
2.5.2.1.2. Windows的OEM Code Page表
2.5.2.1.3. 一些常见的Code Page表
2.5.2.2. 所有的Code Page表
2.6. ANSI字符编码
2.6.1. ANSI是啥
2.6.2. ANSI编码规则
2.6.3. ANSI (Windows 1252)编码表
2.6.4. ANSI编码与ANSI的关系
2.6.5. ANSI字符编码和Windows 1252
2.6.5.1. Windows 1252和ISO 8859-1之间的区别
2.6.6. 为何"ANSI编码"(在Windows中)被称为"本地编码"
2.7. BOM
2.7.1. BOM是什么
2.7.2. 为何需要BOM
2.7.3. BOM表
2.8. 中文字符编码标准
2.8.1. GB2312,CP936,GBK,GB18030,GB13000
2.8.1.1. GB2312
2.8.1.2. GB13000
2.8.1.3. GBK
2.8.1.4. GB18030
2.8.2. 各种中文字符编码标准的关系
2.9. 字符存储(交换)标准
2.10. 字形和你所看到的字符的关系
参考书目
A. 编码相关的表格
A.1. ASCII编码表(0-127)
A.2. ISO/IEC 8859编码标准中的15种字符集
A.3. Code Page表格
A.3.1. 常见的ANSI和OEM的Code Page的表格
A.3.1.1. ANSI Code Page表
A.3.1.2. OEM Code Page表
A.3.1.3. ANSI和OEM共有的Code Page表
A.3.1.4. 其他一些常见的Code Page表
A.3.2. 所有的Code Page相关的表格
A.4. 不同编码所用的BOM

插图清单

2.1. ISO/IEC 8859的15个字符集的部分比较
2.2. ISO/IEC 8859-1字符集表
2.3. Unicode中的各种平面划分
2.4. Notepad中的各种编码
2.5. 汉字“宋”的不同字体

表格清单

2.1. ASCII中的控制字符
2.2. 各种单字节编码标准之间的关系
2.3. ISO/IEC 10646与Unicode的版本对应关系
2.4. Unicode与UTF-8之间的编码映射关系
2.5. 中文字符相关编码标准
2.6. 字符(存储)交换标准
A.1. ASCII编码表(0-127)
A.2. ISO/IEC 8859编码标准中的15种字符集
A.3. ANSI的SBCS Code Page
A.4. OEM的Code Page
A.5. ANSI和OEM共有的DBCS Code Page
A.6. 一些常见的Code Page
A.7. 微软的代码页标识符(Code Page Identifiers)
A.8. 不同编码所用的BOM