UTF8Encoding 类

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

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

语法

声明
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class UTF8Encoding
    Inherits Encoding
用法
Dim instance As UTF8Encoding
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public class UTF8Encoding : Encoding
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public ref class UTF8Encoding : public Encoding
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public class UTF8Encoding extends Encoding
SerializableAttribute 
ComVisibleAttribute(true) 
public class UTF8Encoding 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 方法执行实际的解码。

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

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

提示

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

UTF8Encoding 对应于 Windows 代码页 65001。

提示

如果使用不同的 .NET Framework 版本来序列化和反序列化对象,则不保留以 UTF-8 编码的对象的状态。

示例

下面的示例演示了如何使用 UTF8Encoding 对 Unicode 字符串进行编码,并将它们存储在字节数组中。请注意,将 encodedBytes 解码回字符串时不会丢失数据。

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

Class UTF8EncodingExample
    
    Public Shared Sub Main()
        ' Create a UTF-8 encoding.
        Dim utf8 As New UTF8Encoding()
        
        ' A Unicode string with two characters outside an 8-bit code range.
        Dim unicodeString As String = _
            "This unicode string contains two characters " & _
            "with codes outside an 8-bit code range, " & _
            "Pi (" & ChrW(928) & ") and Sigma (" & ChrW(931) & ")."
        Console.WriteLine("Original string:")
        Console.WriteLine(unicodeString)
        
        ' Encode the string.
        Dim encodedBytes As Byte() = utf8.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 = utf8.GetString(encodedBytes)
        Console.WriteLine()
        Console.WriteLine("Decoded bytes:")
        Console.WriteLine(decodedString)
    End Sub
End Class
using System;
using System.Text;

class UTF8EncodingExample {
    public static void Main() {
        // Create a UTF-8 encoding.
        UTF8Encoding utf8 = new UTF8Encoding();
        
        // A Unicode string with two characters outside an 8-bit code range.
        String unicodeString =
            "This unicode string contains two characters " +
            "with codes outside an 8-bit code range, " +
            "Pi (\u03a0) and Sigma (\u03a3).";
        Console.WriteLine("Original string:");
        Console.WriteLine(unicodeString);

        // Encode the string.
        Byte[] encodedBytes = utf8.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 = utf8.GetString(encodedBytes);
        Console.WriteLine();
        Console.WriteLine("Decoded bytes:");
        Console.WriteLine(decodedString);
    }
}
using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
   
   // Create a UTF-8 encoding.
   UTF8Encoding^ utf8 = gcnew UTF8Encoding;
   
   // A Unicode string with two characters outside an 8-bit code range.
   String^ unicodeString = L"This unicode string contains two characters with codes outside an 8-bit code range, Pi (\u03a0) and Sigma (\u03a3).";
   Console::WriteLine( "Original string:" );
   Console::WriteLine( unicodeString );
   
   // Encode the string.
   array<Byte>^encodedBytes = utf8->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 = utf8->GetString( encodedBytes );
   Console::WriteLine();
   Console::WriteLine( "Decoded bytes:" );
   Console::WriteLine( decodedString );
}
import System.*;
import System.Text.*;

class UTF8EncodingExample
{
    public static void main(String[] args)
    {
        // Create a UTF-8 encoding.
        UTF8Encoding utf8 = new UTF8Encoding();

        // A Unicode string with two characters outside an 8-bit code range.
        String unicodeString = "This unicode string contains two characters "
            + "with codes outside an 8-bit code range, " 
            + "Pi (\u03a0) and Sigma (\u03a3).";
        Console.WriteLine("Original string:");
        Console.WriteLine(unicodeString);

        // Encode the string.
        ubyte encodedBytes[] = utf8.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 = utf8.GetString(encodedBytes);
        Console.WriteLine();
        Console.WriteLine("Decoded bytes:");
        Console.WriteLine(decodedString);
    } //main
} //UTF8EncodingExample

继承层次结构

System.Object
   System.Text.Encoding
    System.Text.UTF8Encoding

线程安全

此类型的任何公共静态(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

请参见

参考

UTF8Encoding 成员
System.Text 命名空间
Decoder 类
Encoder 类