笔记-UTF-8、UTF-16编码

UTF-8编码方式:

UTF-8使用一至四个字节为每个字符编码,编码规则如下:

  1. 单字节的字符:对于标准的ASCII字符(U+0000至U+007F),UTF-8和ASCII编码是相同的,使用单个字节,其最高位始终为0。
  2. 多字节的字符:对于其他范围内的字符,则使用两个到四个字节表示:
    • 两字节字符:第一个字节的前三位为110,后面五位用于数据;第二个字节的前两位为10,后面六位用于数据。
    • 三字节字符:第一个字节的前四位为1110,后面四位用于数据;随后的字节的前两位为10,后面六位用于数据。
    • 四字节字符:第一个字节的前五位为11110,后面三位用于数据;随后的字节的前两位为10,后面六位用于数据。

每个字节中,以10开头的字节为后续字节,它们不会独立出现,只会跟随一个高位字节。这种编码方法的一个优势是通过查看任意字节,都能够知道它是单独的字符还是某个字符的一部分,因为UTF-8字节序列是顺序无关的,所以不像UTF-16和UTF-32,UTF-8不需要字节顺序标记(BOM)来指示字节的顺序

UTF-16编码方式:

UTF-16(16-bit Unicode Transformation Format)使用单个16位的代码单元来编码U+0000至U+FFFF之间的字符,这部分包括了基本的多语言平面(BMP)。对于更高位的字符,则使用一对16位的代码单元,即32位来编码,这种对称称为代理对(Surrogate Pair)。

  • BMP字符:使用一个16位的代码单元,直接对应于字符的Unicode码点。
  • 代理对:对于超出BMP的字符,使用两个16位的代码单元。第一个代码单元(高代理项)的范围是U+D800至U+DBFF,第二个代码单元(低代理项)的范围是U+DC00至U+DFFF。

UTF-8与UTF-16的区别:

  1. 字节顺序:UTF-8是字节顺序无关的,而UTF-16需要区分字节顺序,因此有UTF-16LE和UTF-16BE两种格式,分别代表小端序和大端序,有时还有带字节顺序标记(BOM)的格式。
  2. 空间效率:对于ASCII字符,UTF-8更为高效,只需要一个字节。而UTF-16不论什么字符至少需要两个字节。但对于很多亚洲语言,UTF-16可能更加空间高效,因为这些语言中的字符在UTF-8中可能需要三个或四个字节。
  3. 编码复杂性:UTF-8是可变长度的,从1到4个字节不等;UTF-16也是可变长度的,但主要是两个长度,要么是2个字节,要么是4个字节(代理对)。
  4. 兼容性:UTF-8编码兼容ASCII,因此被广泛用于网络和文件存储,特别是在主要交流用的是ASCII字符的系统中。UTF-16常用于需要处理大量非BMP字符的应用中,比如某些文本处理软件。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注