导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

UnicodeEncoding 类

2013/12/13

表示 Unicode 字符的 UTF-16 编码。

System.Object
  System.Text.Encoding
    System.Text.UnicodeEncoding

Namespace:  System.Text
程序集:  mscorlib(位于 mscorlib.dll 中)

public class UnicodeEncoding : Encoding

UnicodeEncoding 类型公开以下成员。

  名称说明
公共方法UnicodeEncoding()初始化 UnicodeEncoding 类的新实例。
公共方法UnicodeEncoding(Boolean, Boolean)初始化 UnicodeEncoding 类的新实例。参数指定是否使用 Big-Endian 字节顺序以及是否提供 Unicode 字节顺序标记。
公共方法UnicodeEncoding(Boolean, Boolean, Boolean)初始化 UnicodeEncoding 类的新实例。参数指定是否使用 Big-Endian 字节顺序,是否提供 Unicode 字节顺序标记,以及当检测到无效编码时是否引发异常。
返回顶部

  名称说明
公共属性WebName在派生类中重写时,获取在 Internet 编号分配管理机构 (IANA) 注册的当前编码的名称。 (从 Encoding 继承。)
返回顶部

  名称说明
公共方法Clone当在派生类中重写时,创建当前 Encoding 对象的一个浅表副本。 (从 Encoding 继承。)
公共方法Equals确定指定的 Object 是否等于当前的 UnicodeEncoding 对象。 (重写 Encoding.Equals(Object)。)
受保护的方法Finalize允许 Object 在垃圾回收器回收该对象之前尝试释放资源并执行其他清理操作。 (从 Object 继承。)
公共方法GetByteCount(Char[])在派生类中重写时,计算对指定字符数组中的所有字符进行编码所产生的字节数。 (从 Encoding 继承。)
公共方法GetByteCount(String)计算对指定字符串中的字符进行编码时产生的字节数。 (重写 Encoding.GetByteCount(String)。)
公共方法GetByteCount(Char[], Int32, Int32)计算对指定字符数组中的一组字符进行编码时产生的字节数。 (重写 Encoding.GetByteCount(Char[], Int32, Int32)。)
公共方法GetBytes(Char[])在派生类中重写时,将指定字符数组中的所有字符编码为一个字节序列。 (从 Encoding 继承。)
公共方法GetBytes(String)在派生类中重写时,将指定字符串中的所有字符编码为一个字节序列。 (从 Encoding 继承。)
公共方法GetBytes(Char[], Int32, Int32)在派生类中重写时,将指定字符数组中的一组字符编码为一个字节序列。 (从 Encoding 继承。)
公共方法GetBytes(Char*, Int32, Byte*, Int32)安全非常关键。 将从指定的字符指针开始的一组字符编码为一个字节序列,并从指定的字节指针开始存储该字节序列。 (重写 Encoding.GetBytes(Char*, Int32, Byte*, Int32)。)
公共方法GetBytes(Char[], Int32, Int32, Byte[], Int32)将指定字符数组中的一组字符编码到指定的字节数组中。 (重写 Encoding.GetBytes(Char[], Int32, Int32, Byte[], Int32)。)
公共方法GetBytes(String, Int32, Int32, Byte[], Int32)将指定 String 中的一组字符编码到指定的字节数组中。 (重写 Encoding.GetBytes(String, Int32, Int32, Byte[], Int32)。)
公共方法GetCharCount(Byte[])在派生类中重写时,计算对指定字节数组中的所有字节进行解码所产生的字符数。 (从 Encoding 继承。)
公共方法GetCharCount(Byte[], Int32, Int32)计算对指定字节数组中的一个字节序列进行解码所产生的字符数。 (重写 Encoding.GetCharCount(Byte[], Int32, Int32)。)
公共方法GetChars(Byte[])在派生类中重写时,将指定字节数组中的所有字节解码为一组字符。 (从 Encoding 继承。)
公共方法GetChars(Byte[], Int32, Int32)在派生类中重写时,将指定字节数组中的一个字节序列解码为一组字符。 (从 Encoding 继承。)
公共方法GetChars(Byte[], Int32, Int32, Char[], Int32)将指定字节数组中的一个字节序列解码为指定的字符数组。 (重写 Encoding.GetChars(Byte[], Int32, Int32, Char[], Int32)。)
公共方法GetDecoder获取可以将 UTF-16 编码的字节序列转换为 Unicode 字符序列的解码器。 (重写 Encoding.GetDecoder()。)
公共方法GetEncoder获取可将 Unicode 字符序列转换为 UTF-16 编码的字节序列的编码器。 (重写 Encoding.GetEncoder()。)
公共方法GetHashCode返回当前实例的哈希代码。 (重写 Encoding.GetHashCode()。)
公共方法GetMaxByteCount计算对指定数目的字符进行编码时产生的最大字节数。 (重写 Encoding.GetMaxByteCount(Int32)。)
公共方法GetMaxCharCount计算对指定数目的字节进行解码时产生的最大字符数。 (重写 Encoding.GetMaxCharCount(Int32)。)
公共方法GetPreamble返回用 UTF-16 格式编码的 Unicode 字节顺序标记。 (重写 Encoding.GetPreamble()。)
公共方法GetString将字节数组中某个范围的字节解码为一个字符串。 (重写 Encoding.GetString(Byte[], Int32, Int32)。)
公共方法GetType获取当前实例的 Type (从 Object 继承。)
受保护的方法MemberwiseClone创建当前 Object 的浅表副本。 (从 Object 继承。)
公共方法ToString返回一个字符串,它表示当前的对象。 (从 Object 继承。)
返回顶部

编码是一个将一组 Unicode 字符转换为一个字节序列的过程。解码是将一个编码字节序列转换为一组 Unicode 字符的过程。Unicode 标准为所支持的每个脚本中的每个字符分配一个码位(一个数字)。Unicode 转换格式 (UTF) 是一种码位编码方式。UTF-16 编码将每个码位表示为一个由 1 至 2 个 16 位整数组成的序列。

编码器可以使用 Big-Endian 字节顺序(从最高有效字节开始),也可以使用 Little-Endian 字节顺序(从最低有效字节开始)。例如,大写拉丁字母 A(码位为 U+0041)的序列化结果(十六进制)如下所示:

  • Big-Endian 字节顺序:00 00 00 41

  • Little-Endian 字节顺序:41 00 00 00

通常,使用本机字节顺序存储 Unicode 字符的效率更高。例如,在 Little-endian 平台(如 Intel 计算机)上最好使用 Little-endian 字节顺序,在 Big-endian 平台上最好使用 Big-endian 字节顺序。

可以通过以下任一方式实例化 UnicodeEncoding 对象:

  • 通过检索由 UnicodeBigEndianUnicode 属性返回的 UnicodeEncoding 对象。前一个属性返回的编码对象使用 Little-endian 字节顺序,而后一个属性返回的编码对象则使用 Big-endian 字节顺序。

  • 通过调用 GetEncoding 方法,其 name 参数的值设置为“utf-16”(对于 Little-endian 字节顺序)或“utf-16BE”(对于 Big-endian 字节顺序)。

  • 通过调用 UnicodeEncoding 类构造函数的重载之一。实例化 UnicodeEncoding 对象的其他方式会返回默认的 UnicodeEncoding 对象,与它们不同,类构造函数的重载允许您定义编码的字节顺序,还允许定义编码是否包含前导码,以及如果遇到无效编码是否引发异常。

GetByteCount 方法确定将有多少字节导致对 Unicode 字符集进行编码,而 GetBytes 方法将执行实际的编码操作。

同样,GetCharCount 方法确定有多少字符导致对字节序列进行解码,而 GetCharsGetString 方法执行实际的解码。

或者,UnicodeEncoding 对象提供一个前导码(即一个字节数组),可以将它作为编码过程中所产生的字节序列的前缀。如果前导码中包含字节顺序标记 (BOM),则它会帮助解码器确定字节顺序和转换格式或 UTF。GetPreamble 方法检索一个可以包括 BOM 的字节数组。有关字节顺序和字节顺序标记的更多信息,请参见位于 Unicode 主页上的“Unicode 标准”。

说明注意:

若要启用错误检测并使类实例更加安全,应用程序应当使用带有 throwOnInvalidBytes 参数的 UnicodeEncoding 构造函数,并将该参数设置为 true。使用错误检测时,检测到无效字符序列或字节序列的方法将引发 ArgumentException。如果不使用错误检测,则不引发异常,并且通常会忽略无效序列。

下面的示例演示如何使用 UnicodeEncoding 将 Unicode 字符串编码为字节数组。然后将该字节数组解码为字符串,以表明没有丢失数据。


using System;
using System.Text;

class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      // The encoding.
      UnicodeEncoding unicode = new UnicodeEncoding();

      // Create a string that contains Unicode characters.
      String unicodeString =
          "This Unicode string contains two characters " +
          "with codes outside the traditional ASCII code range, " +
          "Pi (\u03a0) and Sigma (\u03a3).";
      outputBlock.Text += "Original string:" + "\n";
      outputBlock.Text += unicodeString + "\n";

      // Encode the string.
      Byte[] encodedBytes = unicode.GetBytes(unicodeString);
      outputBlock.Text += "\n";
      outputBlock.Text += "Encoded bytes:" + "\n";
      foreach (Byte b in encodedBytes)
      {
         outputBlock.Text += String.Format("[{0}]", b);
      }
      outputBlock.Text += "\n";

      // Decode bytes back to string.
      // Notice Pi and Sigma characters are still present.
      String decodedString = unicode.GetString(encodedBytes, 
                                               0, encodedBytes.Length);
      outputBlock.Text += "\n";
      outputBlock.Text += "Decoded bytes:" + "\n";
      outputBlock.Text += decodedString + "\n";
   }
}


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

此类型的所有公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

显示:
© 2014 Microsoft