字符集 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,可能会导致无法解析。