字符集 UTF-8编码
UTF-8(8-bit Unicode Transformation Format)是一种变长编码方式,使用 1 到 4 个字节对字符进行编码,并可以扩展到 8 个字节。
UTF-8 是 Unicode 一种具体的编码实现,在互联网上使用最为广泛。
1. UTF-8 优势
- UTF-8 编码使用变长编码,而非使用统一的长度编码,有利于节约网络流量。
- UTF-8 完全兼容 ASCII 码,对于 ASCII 码中的字符,UTF-8 采用的编码值跟 ASCII 码完全一致。这使得原来处理ASCII字符的软件无须或只须做少部份修改,即可继续使用。
- UTF-8 容量大,可以用来表示 Unicode 标准中的任何字符,并可以扩展到 8 个字节。
2. UTF-8 编码规则
UTF-8 编码规则:
- 对于单字节的符号,字节的第一位设为0,后面 7 位为这个符号的 unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。
- 对于n字节的符号(n>1),第一个字节的前 n 位都设为 1,第 n+1 位设为0,后面字节的前两位一律设为 10。剩下的没有提及的二进制位,全部为这个符号的unicode 码。
UTF-8 字节布局:
字节数 | 编码位数 | UTF-8字节流 |
---|---|---|
1 | 7 | 0xxxxxxx |
2 | 11 | 110xxxxx 10xxxxxx |
3 | 16 | 1110xxxx 10xxxxxx 10xxxxxx |
4 | 21 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
5 | 26 | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
6 | 31 | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
7 | 36 | 11111110 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
8 | 42 | 11111111 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
3. BOM
BOM 是 Byte Order Mark 的简称,通常出现在 Unicode 流的开头部分,用来说明编码类型。
因为系统可能是 big endian,也可能是 little endian, 或者是多字节的 Unicode 编码。
把BOM放置在文件开头部分,利用它来判断字节序。
在 UTF-8 编码中,BOM 没有太大的意义,并且不推荐使用它。
在 HTML 或 XML 的文件开头放置 BOM,可能会导致无法解析。