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 的这个子集需要最多三个字节。