现在的位置: 首页 > 综合 > 正文

字符编码的相关笔记

2012年10月26日 ⁄ 综合 ⁄ 共 666字 ⁄ 字号 评论关闭

1. ASCII

一个字节中前7个bit的低128个字符表示.

2. ANSI

利用第8个bit, 即数字128 - 255的高128表示.  每个地区有不同的表示方式, 这种相异的编码系统称为代码页code page.

因为某些语言有上千个字符, 一个字节无法表示这么多字符, 所以有了双字节字符集DBCS(Double-byte charater set) 的解决方案,  即有的字母使用一个字节来表示, 有的使用两个字节.

3. Unicode

在Unicode中一个字符被映射到一个码点(code point), 可以理解成一个字符在字符表中的位置. 例如, Hello 对应的码点为 U+0048 U+0065 U+006C U+006C U+006F (十六进制).

Unicode并没有规定如何实储存这些码点.

最早的编码实现是把每个码点都储存到两个字节中, 称之为UCS-2或者UTF-16. 因为有小端序和大端序的区别( 参考wiki: 字节序 ), 所以人们就必须使用FE FF作为每一个Unicode字符串的开头, 称之为字节序标记(Unicode Byte Order Mark). 如果互换了高位与低位,就变成了FF FE,这样读取这个字符串的程序就知道后面字节也需要互换了. 但是, 不保证每一个Unicode字符串都有字节序标记.

UTF-8是另一个系统,用来存储字符串所对应的Unicode的码点 (code points)-即那些神奇的U+数字组合,在内存中,而且存储的最小单元是8比特的字节。在UTF-8中,0-127之间的码字都使用一个字节来存储, 超过128的码字使用2,3甚至6个字节来存储。  

抱歉!评论已关闭.