2011年6月26日日曜日

[基础知识] 字符, 字符集, 字符集编码

1. 字符 Character (A, 1, ! 等)
抽象的最小文本单位, 没有固定的形状, 而且没有值, 仅仅代表一个符号, 没有任何实际值的意义

2. 字符集 CharacterSet (Unicode, JIS X 0208 等)
字符集合, 字符在字符集中有固定的位置 (code point, 码点)

3. 编码 Encoding (UTF-8, EUC-JP, Shift_JIS 等)
编码, 以某个字符集为基础, 为每一个字符分配一个唯一数字
UTF-8, UTF-16 -> Unicode
EUC-JP, Shift_JIS, ISO-2022-JP (JIS Code) -> JIS X 0208

4. 几种字符集编码

4-1. ASCII
字符集: 包含大小写英文, 阿拉伯数字, 标点以及一些不可见的控制符共 128 个
编码: 使用 1 个字节的低 7 位表示一个字符, 编码范围 0-127 (0x00-0x7F), 其中 0-31 (0x00-0x1F) 部分以及 127 (0x7F) 是控制符, 其余的都是些可见字符

4-2. GB2312
http://baike.baidu.com/view/25492.htm
字符集: ASCII 字符集 + 7000 左右汉字字符
编码: 兼容 ASCII 编码, 对字节进行判断, <=127, 则意义等同于 ASCII 编码, >127 则它需要跟其后的另一个字节合并表示一个字符

4-3. GBK
字符集: GB2312 字符集 + 20000 左右汉字字符
编码: 兼容 GB2312 编码, 利用了 GB2312 编码闲置的编码空间

4-4. GB18030
字符集: GBK 字符集 + 若干汉字 + 若干少数民族字符, 为目前国内最新的字符集
编码: 兼容GBK编码, 继续利用 GBK 编码闲置的编码空间, 对于超出编码空间的则采用 4 个字节表示

4-5. BIG5
字符集: ASCII 字符集 + 13000 左右汉字(繁体)
编码: 兼容 ASCII 编码, 其编码模式类似于 GB2312

4-6. UNICODE
标准: 始终使用十六进制数字, 而且在书写时在前面加上前缀 "U+", 所以 "A" 的编码书写为 "U+0041"
字符集: 目前最新版的 UNICODE 字符集中已经包含各种语言的超过 10 万的字符
UNICODE 是静态概念, 字符集 (UTF-8 等) 是动态概念, 是每一个字符传递或传输的具体形式
BMP: 基本多语言面 (Basic Multilingual Plane), 0x0000 到 0xFFFD, UCS 的 16位子集
编码: 狭义的 UNICODE 编码可能指 UCS-2, 也可能指 UTF-16, 广义的 UNICODE 编码可以指包括以下四种在内的若干种对 UNICODE 标准的编码实现 (实际在计算中的存储方式)

4-6-1. UTF-32 (Unicode Transformation Format 32-bit)
固定使用 4 个字节来表示一个字符, 存在空间利用效率的问题

4-6-2. UTF-16
对相对常用的 60000 余个字符使用两个字节进行编码, 其余的补充字符 supplementary characters 使用4字节

4-6-3. UCS-2
是对 UNICODE 早期版本的实现, 它与 UTF-16 的唯一区别是它不包括补充字符, 所以它对字符的编码只使用两个字节, 目前此编码模式已过时

4-6-4. UTF-8
兼容 ASCII 编码, 拉丁文希腊文等使用两个字节, 包括汉字在内的其它常用字符使用三个字节, 剩下的极少使用的字符使用四个字节

4-7. ISO8859-1 (ASCII 扩展字符集)
字符集: ASCII 字符集 + 若干西欧字符, 例如字母Â, Ë
编码: 使用 8 位表示一个字符, 同时移除了原 ASCII 编码中的控制符 (0-31, 127)

4-8. ISO-2022-JP
2 字节构成, JIS X 0208 内区和点转化为 16 进制, 分别加 0X20 得到 ISO-2022-JP 码

4-9. EUC-JP
2 字节构成, JIS X 0208 内区和点转化为 16 进制, 分别加 0XA0 得到 EUC-JP 码

4-10. Shift_JIS
TODO

0 件のコメント:

コメントを投稿