UTF-7、UTF-8、UTF-16(Unicode)、UTF-32

作者:vkvi 来源:ITPOW(原创) 日期:2011-1-12

UTF-7、UTF-8、UTF-16(Unicode)、UTF-32 都是 Unicode 编码,一般来说,我们说 Unicode 时是指 UTF-16,在 ASP.NET 中也是如此,System.Text.Encoding.Unicode 就是指 Little Endian 的 UTF-16。

UTF

Unicode Transformation Format,Unicode 转换格式。

UTF-7

是一种可变长度字符编码方式,用以将 Unicode 字符以 ASCII 编码的字符串来呈现,可以应用在电子邮件传输之类的应用。

UTF-8

一个单元为 8 位,至少占用 8 位,至多占用 32 位。

由于针对英文时只占用 8 位,这对英文出现频率很高,且需要在网络上传输的网页来说,尤为有吸引力,所以现在很多网页、XML 文件都是用的 UTF-8 编码。

UTF-16

一个单元为 16 位,至少占用 16 位,至多占用 32 位。

用在 Java 和 Windows 中。

常说 Unicode 就是指 UTF-16。

UTF-32

一个单元为 32 位,至少占用 32 位,至多占用 32 位。

用在 Unix 系统中。

Big Endian 和 Little Endian

缩写为 BE 和 LE,俗称大头和小头,是针对 UTF-16 和 UTF-32 的。

这是什么意思呢?假如字母 a,它的 ASCII 值是 97,16 进制为 0x61。

  • UTF-8 的一个单元是 8 位,所以 UTF-8 就用 0x61 表示 a。
  • 但 UTF-16 的一个单元是 16 位,所以得再补充 8 位空的,一种方式是在前面补,即[0x00, 0x61],这就是 Big Endian;但有一种情况是用[0x61 0x00]来表示,这就是 Little Endian,据说这是为了提高 CPU 处理速度而设计的,这个比较常用,ASP.NET 中也是这样的。那怎么知道一个编码用的是 Big Endian 还是 Little Endian 呢?这就引入了 BOM(Byte Order Mark)这个东西,即在文件的头两个字节作标记,用来表示是 Big Endian 还是 Little Endian。[0xFE, 0xFF] 表 Big Endian,[0xFF, 0xFE] 表示 Little Endian。
  • UTF-32 类似 UTF-16。
相关文章