字符编码相关常识

字符编码简介

1. ASCII

ASSII(American Standard Code for Information Interchange),是一种单字节编码。单字节可以表示 256 个不同的字符,可以表示所有的英文字符和许多控制符号。ASCII只用到其中的一半(\x80以下),这是MBCS得以实现的基础。

2. MBCS

MBCS(Multi-Byte Character Set)是一种多字节编码。目前大多使用双字节编码,所以也叫DBCS(Double-Byte Character Byte)。MBCS并不是某一种特定的编码,Windows 中根据设定的区域不同,指代不同的编码。而Linux里无法使用MBCS作为编码。Windows中,微软使用ANSI来代表MBCS,在简体中文Windows默认的区域设定里,指代GBK。
如GBxxx、BIGxxx等,都是多字节字符编码,他们的规则是:如果第一个字节是\x80以下,则仍然表示ASCII字符;如果是\x80以上,则跟下一个字节一起(共两个字节)表示一个字符,然后跳过下一个字节,继续往下判断。
IBM发明了一个叫Code Page的概念,将这些编码都收入囊中并分配页码,GBK是第936页,也就是CP936。所以,也可以使用CP936表示GBK。

3. Unicode

UCS(Unicode Character Set)还仅仅是字符对应码位的一张表而已,比如这个字的码位是6C49。字符具体如何传输和储存则是由UTF(UCS Transformation Format)来负责。
Unicode标准UCS-2使用两个字节表示一个字符,UCS-4标准,使用4个字节表示一个字符。
最初,使用UCS的码位来保存,这就是UTF-16,比如,直接使用\x6C\x49保存(UTF-16-BE),或是倒过来使用\x49\x6C保存(UTF-16-LE)。但英文字母只需要一个字节就能保存,变成了两个字节,空间消耗大了一倍,于是UTF-8横空出世。
BOM(Byte Order Mark),文件编码方式。

4. UTF-8

Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6
0xxx xxxx
110x xxxx 10xx xxxx
1110 xxxx 10xx xxxx 10xx xxxx
1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx
1111 10xx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx
1111 110x 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx

查询转换工具

查看字符编码(UTF-8)
在线中文汉字/ASCII码/Unicode编码互相转换工具
在线Unicode编码转换工具(为您提供ASCII与Unicode互转,Unicode与中文互转,中文转换为&#XXXX形式)
GBK 编码
Unicode汉字编码表

参考网址

Unicode 和 UTF-8 有什么区别?
GB18030编码研究以及GBK、GB18030与Unicode的映射

留言