编码是一个将一组 Unicode 字符转换为一个字节序列的过程。解码是将一个编码字节序列转换为一组 Unicode 字符的过程。
Unicode 标准为所有支持脚本中的每个字符分配一个码位(一个数字)。Unicode 转换格式 (UTF) 是一种码位编码方式。Unicode 标准使用以下 UTF:
UTF-8,它将每个码位表示为一个由 1 至 4 个字节组成的序列。
UTF-16,它将每个码位表示为一个由 1 至 2 个 16 位整数组成的序列。
UTF-32,它将每个码位表示为一个 32 位整数。
说明: |
|---|
UTF-7 编码支持某些需要它的协议,最常见的是电子邮件和新闻组协议。由于 UTF-7 不是特别安全或可靠,因此通常不应当使用它。通常应当优先使用 UTF-8,而不是 UTF-7。 |
有关 System.Text 所支持的 UTF 和其他编码的更多信息,请参见了解编码和使用 Unicode 编码。
GetByteCount 方法确定将有多少字节对 Unicode 字符集进行编码,而 GetBytes 方法执行实际的编码。
同样,GetCharCount 方法确定将有多少字符对字节序列进行解码,而 GetChars 和 GetString 方法执行实际的解码。
UnicodeEncoding 与 Windows 代码页 1200(Little-Endian 字节顺序)和 1201(Big-Endian 字节顺序)对应。
编码器可以使用 Big-Endian 字节顺序(从最高有效字节开始),也可以使用 Little-Endian 字节顺序(从最低有效字节开始)。例如,大写拉丁字母 A(码位为 U+0041)的序列化结果(十六进制)如下所示:
通常,使用本机字节顺序存储 Unicode 字符的效率更高。例如,在 Little-endian 平台(如 Intel 计算机)上最好使用 Little-endian 字节顺序。
或者,UnicodeEncoding 对象提供一个前导码(即一个字节数组),可以将它作为编码过程中所产生的字节序列的前缀。如果前导码中包含字节顺序标记 (BOM),则它会帮助解码器确定字节顺序和转换格式或 UTF。GetPreamble 方法检索一个可以包括 BOM 的字节数组。有关字节顺序和字节顺序标记的更多信息,请参见位于 Unicode home page(Unicode 主页)上的“The Unicode Standard”(Unicode 标准)。
说明: |
|---|
若要启用错误检测并使类实例更加安全,应用程序应当使用带有 throwOnInvalidBytes 参数的 UnicodeEncoding 构造函数,并将该参数设置为 true。使用错误检测时,检测到无效字符序列或字节序列的方法将引发 ArgumentException。如果不使用错误检测,则不引发异常,并且通常会忽略无效序列。 |