UTF-8(UCS 变换格式)

The Open Group 为 UCS 开发了一种变换格式,旨在用于现有的文件系统。 其目的是使 UCS 成为变换格式的进程码,亦即可用作文件码。

UTF-8 有以下属性:
  • 它是 ASCII 的超集,ASCII 字符在其中被编码为具有相同数字值单字节字符。
  • 在多字节字符中,不能出现 ASCII 代码值(除非该字符就是表示 ASCII 字符)。
  • 一个字符的第一个字节指出了本多字节字符序列中随后的字节数,并且不能出现在本序列的其他地方。

UTF-8 使用长度为 1、2、3、4、5 和 6 个字节的多字节字符在 0 到 0x7FFFFFFF 范围内编码 UCS 值。 单字节字符在 0 到 0x7f 范围内被保留为 ASCII 字符。 这些字符都具有设置为 0 的高位位。 对于超过一个字节的所有字符编码,初始字节确定使用的字节数,并设置每个字节中的高位位。 不以 10xxxxxx(x 表示一个位,可为 0 可为 1 )组合位开头的每个字节是 UCS 字符序列的开头字节。 下表提供了 UTF-8 多字节码:

字节数 位数 最小十六进制值 最大十六进制值 二进制表示的字节序列
1 7 00000000 0000007F 0xxxxxxx
2 11 00000080 000007FF 110xxxxx 10xxxxxx
3 16 00000800 0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
4 21 00010000 001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5 26 00200000 03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxx 10xxxxxx
6 31 04000000 7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

UCS 值就是多字节编码中多个 x 位的并置。 当一个值可用多种方式进行编码时(例如,UCS 0),只允许最短的编码。

以下是用来编码 UCS-2 的 UTF-8 子集:

字节数 位数 最小十六进制值 最大十六进制值 二进制表示的字节序列
1 7 00000000 0000007F 0xxxxxxx
2 11 00000080 000007FF 110xxxxx 10xxxxxx
3 16 00000800 0000FFFF 1110xxxx 10xxxxxx 10xxxxxx

UTF-8 的这个子集需要最多三个字节。