跳至主要内容

1.字符编码

ASCII编码

  • 美国信息交换标准代码

原始ASCII码表

  • 0-7F

扩展ASCII码表

  • 0-FF
  • GB2312:两个扩展ASCII码组成一个汉字
  • 弊端:每个国家用的格式不同,本机是GB2312可能显示是中文,在他机上就可能会是乱码

Unicode编码

  • 0-0x10FFFF
  • 把所有符号全部存储,每个符号都是唯一编码
  • 问题:Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储

UTF-16

  • 以16位无符号整数为单位,注意是16位一个单位,不代表一个符号就只有16位。这个要看字符的unicode编码出于什么范围而定,有可能是2个字节,也有可能是4个字节。现在机器上的unicode编码一般指的就是UTF-16。
  • 存储单位是两个字节
  • 弊端:一个字符如果只有一个字节,但是UTF-16要存两个字节,增大了存储空间,对于网络传输不够友好

UTF-8

1
2
3
4
5
Unicode          UTF-8字节流(二进制)
000000-00007F -> 0xxxxxxx
000080-0007FF -> 110xxxxx 10xxxxxx
000800-00FFFF -> 1110xxxx 10xxxxxx 10xxxxxx
010000-10FFFF -> 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
  • 缺点:解析繁琐,中文的话可能不如UTF-16更省空间

BOM(Byte Order Mark)

  • 判断文本文件的存储格式
1
2
3
UTF-8     -> EF BB BF
UTF-16LE -> FF FE
UTF-16BE -> FE FF

关于本文

由 GuQing 撰写,采用 CC BY-NC 4.0 许可协议。