UnicodeEncoding 类

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

**命名空间:**System.Text
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class UnicodeEncoding
    Inherits Encoding
用法
Dim instance As UnicodeEncoding
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public class UnicodeEncoding : Encoding
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public ref class UnicodeEncoding : public Encoding
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public class UnicodeEncoding extends Encoding
SerializableAttribute 
ComVisibleAttribute(true) 
public class UnicodeEncoding extends Encoding

备注

编码是一个将一组 Unicode 字符转换为一个字节序列的过程。解码是一个反向操作过程,即将一个编码字节序列转换为一组 Unicode 字符。

Unicode 标准为所有支持脚本中的每个字符分配一个码位(一个数字)。Unicode 转换格式 (UTF) 是一种码位编码方式。Unicode 标准 3.2 版使用下列 UTF:

  • UTF-8,它将每个码位表示为一个由 1 至 4 个字节组成的序列。

  • UTF-16,它将每个码位表示为一个由 1 至 2 个 16 位整数组成的序列。

  • UTF-32,它将每个码位表示为一个 32 位整数。

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

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

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

  • Big-Endian 字节顺序:00 41

  • Little-Endian 字节顺序:41 00

或者,UnicodeEncoding 提供一个前导码(即一个字节数组),可以将它作为编码过程中所产生的字节序列的前缀。如果前导码中包含字节顺序标记(码位为 U+FEFF),则它会帮助解码器确定字节顺序和转换格式或 UTF。Unicode 字节顺序标记的序列化结果(十六进制)如下所示:

  • Big-Endian 字节顺序:FE FF

  • Little-Endian 字节顺序:FF FE

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

GetPreamble 方法返回一个包含字节顺序标记的字节数组。如果将此字节数组作为编码流的前缀,将有助于解码器识别所用的编码格式。

有关 Unicode 编码、字节顺序和字节顺序标记的更多信息,请参见 www.unicode.org 上的“The Unicode Standard”(Unicode 标准)部分。

提示

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

UnicodeEncoding 对应于 Windows 代码页 1200(Little-Endian 字节顺序)和 1201(Big-Endian 字节顺序)。

示例

下面的代码示例演示了如何使用 UnicodeEncoding 将 Unicode 字符串编码为字节数组。然后对此字节数组进行解码,将其还原为字符串,以表明没有丢失数据。

Imports System
Imports System.Text
Imports Microsoft.VisualBasic.Strings

Class UnicodeEncodingExample
    
    Public Shared Sub Main()
        ' The encoding.
        Dim uni As New UnicodeEncoding()
        
        ' Create a string that contains Unicode characters.
        Dim unicodeString As String = _
            "This Unicode string contains two characters " & _
            "with codes outside the traditional ASCII code range, " & _
            "Pi (" & ChrW(928) & ") and Sigma (" & ChrW(931) & ")."
        Console.WriteLine("Original string:")
        Console.WriteLine(unicodeString)
        
        ' Encode the string.
        Dim encodedBytes As Byte() = uni.GetBytes(unicodeString)
        Console.WriteLine()
        Console.WriteLine("Encoded bytes:")
        Dim b As Byte
        For Each b In  encodedBytes
            Console.Write("[{0}]", b)
        Next b
        Console.WriteLine()
        
        ' Decode bytes back to string.
        ' Notice Pi and Sigma characters are still present.
        Dim decodedString As String = uni.GetString(encodedBytes)
        Console.WriteLine()
        Console.WriteLine("Decoded bytes:")
        Console.WriteLine(decodedString)
    End Sub
End Class
using System;
using System.Text;

class UnicodeEncodingExample {
    public static void Main() {
        // 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).";
        Console.WriteLine("Original string:");
        Console.WriteLine(unicodeString);

        // Encode the string.
        Byte[] encodedBytes = unicode.GetBytes(unicodeString);
        Console.WriteLine();
        Console.WriteLine("Encoded bytes:");
        foreach (Byte b in encodedBytes) {
            Console.Write("[{0}]", b);
        }
        Console.WriteLine();
        
        // Decode bytes back to string.
        // Notice Pi and Sigma characters are still present.
        String decodedString = unicode.GetString(encodedBytes);
        Console.WriteLine();
        Console.WriteLine("Decoded bytes:");
        Console.WriteLine(decodedString);
    }
}
using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
   
   // The encoding.
   UnicodeEncoding^ unicode = gcnew UnicodeEncoding;
   
   // Create a String* that contains Unicode characters.
   String^ unicodeString = L"This Unicode string contains two characters with codes outside the traditional ASCII code range, Pi (\u03a0) and Sigma (\u03a3).";
   Console::WriteLine( "Original string:" );
   Console::WriteLine( unicodeString );
   
   // Encode the String*.
   array<Byte>^encodedBytes = unicode->GetBytes( unicodeString );
   Console::WriteLine();
   Console::WriteLine( "Encoded bytes:" );
   IEnumerator^ myEnum = encodedBytes->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Byte b = safe_cast<Byte>(myEnum->Current);
      Console::Write( "[{0}]", b );
   }

   Console::WriteLine();
   
   // Decode bytes back to String*.
   // Notice Pi and Sigma characters are still present.
   String^ decodedString = unicode->GetString( encodedBytes );
   Console::WriteLine();
   Console::WriteLine( "Decoded bytes:" );
   Console::WriteLine( decodedString );
}
import System.*;
import System.Text.*;

class UnicodeEncodingExample
{
    public static void main(String[] args)
    {
        // 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).";
        Console.WriteLine("Original string:");
        Console.WriteLine(unicodeString);

        // Encode the string.
        ubyte encodedBytes[] = unicode.GetBytes(unicodeString);
        Console.WriteLine();
        Console.WriteLine("Encoded bytes:");
        for(int iCtr = 0; iCtr < encodedBytes.length; iCtr++) {
            ubyte b = encodedBytes[iCtr];
            Console.Write("[{0}]", String.valueOf(b));
        }
        Console.WriteLine();

        // Decode bytes back to string.
        // Notice Pi and Sigma characters are still present.
        String decodedString = unicode.GetString(encodedBytes);
        Console.WriteLine();
        Console.WriteLine("Decoded bytes:");
        Console.WriteLine(decodedString);
    } //main
} //UnicodeEncodingExample

继承层次结构

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

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

UnicodeEncoding 成员
System.Text 命名空间
Encoding 类
Encoder 类
Decoder 类
UTF32Encoding
UTF8Encoding
UTF7Encoding
ASCIIEncoding 类
System.Globalization.UnicodeCategory
System.Globalization.CharUnicodeInfo