Encoding.UTF8 屬性

定義

取得 UTF-8 格式的編碼方式。Gets an encoding for the UTF-8 format.

public:
 static property System::Text::Encoding ^ UTF8 { System::Text::Encoding ^ get(); };
public static System.Text.Encoding UTF8 { get; }
member this.UTF8 : System.Text.Encoding
Public Shared ReadOnly Property UTF8 As Encoding

屬性值

UTF-8 格式的編碼方式。An encoding for the UTF-8 format.

範例

下列範例會定義包含下列字元的陣列:The following example defines an array that consists of the following characters:

  • 拉丁小寫字母 Z (U + 007A)LATIN SMALL LETTER Z (U+007A)

  • 拉丁小寫字母 A (U + 0061)LATIN SMALL LETTER A (U+0061)

  • 結合短音符(U + 0306)COMBINING BREVE (U+0306)

  • 使用銳角的拉丁小型字母 AE (U + 01FD)LATIN SMALL LETTER AE WITH ACUTE (U+01FD)

  • 希臘文小寫字母 BETA (U + 03B2)GREEK SMALL LETTER BETA (U+03B2)

  • 形成希臘文 ACROPHONIC 閣樓 1000 STATERS (U + 10154)的代理配對(U + D800 U + DD54)。A surrogate pair (U+D800 U+DD54) that forms GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS (U+10154).

它會顯示每個字元的 UTF-16 程式碼單位,並決定 UTF-8 編碼器用來編碼字元陣列所需的位元組數目。It displays the UTF-16 code units of each character and determines the number of bytes required by a UTF-8 encoder to encode the character array. 然後,它會將字元編碼,並顯示產生的 UTF-8 編碼位元組。It then encodes the characters and displays the resulting UTF-8-encoded bytes.

using System;
using System.Text;

public class Example
{
   public static void Main()  
   {
      // Create a character array.
      string gkNumber = Char.ConvertFromUtf32(0x10154);
      char[] chars = new char[] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', 
                                  gkNumber[0], gkNumber[1] };

      // Get UTF-8 and UTF-16 encoders.
      Encoding utf8 = Encoding.UTF8;
      Encoding utf16 = Encoding.Unicode;
      
      // Display the original characters' code units.
      Console.WriteLine("Original UTF-16 code units:");
      byte[] utf16Bytes = utf16.GetBytes(chars);
      foreach (var utf16Byte in utf16Bytes)
         Console.Write("{0:X2} ", utf16Byte);
      Console.WriteLine();
         
      // Display the number of bytes required to encode the array.
      int reqBytes  = utf8.GetByteCount(chars);
      Console.WriteLine("\nExact number of bytes required: {0}", 
                    reqBytes);

      // Display the maximum byte count.
      int maxBytes = utf8.GetMaxByteCount(chars.Length);
      Console.WriteLine("Maximum number of bytes required: {0}\n", 
                        maxBytes);

      // Encode the array of chars.
      byte[] utf8Bytes = utf8.GetBytes(chars);

      // Display all the UTF-8-encoded bytes.
      Console.WriteLine("UTF-8-encoded code units:");
      foreach (var utf8Byte in utf8Bytes)
         Console.Write("{0:X2} ", utf8Byte);
      Console.WriteLine();
   }
}
// The example displays the following output:
//       Original UTF-16 code units:
//       7A 00 61 00 06 03 FD 01 B2 03 00 D8 54 DD
//       
//       Exact number of bytes required: 12
//       Maximum number of bytes required: 24
//       
//       UTF-8-encoded code units:
//       7A 61 CC 86 C7 BD CE B2 F0 90 85 94
Imports System.Text

Public Module Example
   Public Sub Main()
      ' Create a character array.
      Dim gkNumber As String = Char.ConvertFromUtf32(&h10154)
      Dim chars() As Char = {"z"c, "a"c, ChrW(&H0306), ChrW(&H01FD), 
                             ChrW(&H03B2), gkNumber(0), gkNumber(1) }
 
      ' Get UTF-8 and UTF-16 encoders.
      Dim utf8 As Encoding = Encoding.UTF8
      Dim utf16 As Encoding = Encoding.Unicode

      ' Display the original characters' code units.
      Console.WriteLine("Original UTF-16 code units:")
      Dim utf16Bytes() As Byte = utf16.GetBytes(chars)
      For Each utf16Byte In utf16Bytes
         Console.Write("{0:X2} ", utf16Byte)
      Next
      Console.WriteLine()

      Console.WriteLine()
      ' Display the number of bytes required to encode the array.
      Dim reqBytes As Integer = utf8.GetByteCount(chars)
      Console.WriteLine("Exact number of bytes required: {0}", 
                        reqBytes)

      ' Display the maximum byte count.
      Dim maxBytes As Integer = utf8.GetMaxByteCount(chars.Length)
      Console.WriteLine("Maximum number of bytes required: {0}", 
                        maxBytes)
      Console.WriteLine()
      
      ' Encode the array of characters.
      Dim utf8Bytes() As Byte = utf8.GetBytes(chars)

      ' Display all the UTF-8-encoded bytes.
      Console.WriteLine("UTF-8-encoded code units:")
      For Each utf8Byte In utf8Bytes
         Console.Write("{0:X2} ", utf8Byte)
      Next
      Console.WriteLine()
   End Sub 
End Module 
' The example displays the following output:
'    Original UTF-16 code units:
'    7A 00 61 00 06 03 FD 01 B2 03 00 D8 54 DD
'    
'    Exact number of bytes required: 12
'    Maximum number of bytes required: 24
'    
'    UTF-8-encoded code units:
'    7A 61 CC 86 C7 BD CE B2 F0 90 85 94

備註

這個屬性會傳回 UTF8Encoding 物件,其會將 Unicode (UTF-16 編碼)字元編碼成每個字元一到四個位元組的序列,並將 UTF-8 編碼的位元組陣列解碼成 Unicode (UTF-16 編碼)字元。This property returns a UTF8Encoding object that encodes Unicode (UTF-16-encoded) characters into a sequence of one to four bytes per character, and that decodes a UTF-8-encoded byte array to Unicode (UTF-16-encoded) characters. 如需 .NET 所支援之字元編碼的詳細資訊,以及要使用哪些 Unicode 編碼的討論,請參閱.net 中的字元編碼For information about the character encodings supported by .NET and a discussion of which Unicode encoding to use, see Character Encoding in .NET.

這個屬性所傳回的 UTF8Encoding 物件可能沒有您應用程式的適當行為。The UTF8Encoding object that is returned by this property might not have the appropriate behavior for your app.

  • 它會傳回提供 Unicode 位元組順序標記(BOM)的 UTF8Encoding 物件。It returns a UTF8Encoding object that provides a Unicode byte order mark (BOM). 若要具現化不提供 BOM 的 UTF8 編碼,請呼叫 UTF8Encoding 的任何多載。To instantiate a UTF8 encoding that doesn't provide a BOM, call any overload of the UTF8Encoding constructor.

  • 它會傳回一個 UTF8Encoding 物件,它會使用取代回溯來取代無法編碼的每個字串,以及它無法使用問號("?")字元解碼的每個位元組。It returns a UTF8Encoding object that uses replacement fallback to replace each string that it can't encode and each byte that it can't decode with a question mark ("?") character. 相反地,您可以呼叫 UTF8Encoding.UTF8Encoding(Boolean, Boolean) 的函式來具現化其回溯為 EncoderFallbackExceptionDecoderFallbackExceptionUTF8Encoding 物件,如下列範例所示。Instead, you can call the UTF8Encoding.UTF8Encoding(Boolean, Boolean) constructor to instantiate a UTF8Encoding object whose fallback is either an EncoderFallbackException or a DecoderFallbackException, as the following example illustrates.

    using System;
    using System.Text;
    
    public class Example
    {
       public static void Main()
       {
          Encoding enc = new UTF8Encoding(true, true);
          string value = "\u00C4 \uD802\u0033 \u00AE"; 
    
          try {
             byte[] bytes= enc.GetBytes(value);
             foreach (var byt in bytes)
                Console.Write("{0:X2} ", byt);
             Console.WriteLine();
    
             string value2 = enc.GetString(bytes);
             Console.WriteLine(value2);
          }
          catch (EncoderFallbackException e) {
             Console.WriteLine("Unable to encode {0} at index {1}", 
                               e.IsUnknownSurrogate() ? 
                                  String.Format("U+{0:X4} U+{1:X4}", 
                                                Convert.ToUInt16(e.CharUnknownHigh),
                                                Convert.ToUInt16(e.CharUnknownLow)) :
                                  String.Format("U+{0:X4}", 
                                                Convert.ToUInt16(e.CharUnknown)),
                               e.Index);
          }                     
       }
    }
    // The example displays the following output:
    //        Unable to encode U+D802 at index 2
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          Dim enc As Encoding = New UTF8Encoding(True, True)
          Dim value As String = String.Format("{0} {1}{2} {3}", 
                                ChrW(&h00C4), ChrW(&hD802), ChrW(&h0033), ChrW(&h00AE))
          
          Try
             Dim bytes() As Byte = enc.GetBytes(value)
             For Each byt As Byte In bytes
                Console.Write("{0:X2} ", byt)
             Next       
             Console.WriteLine()
             Dim value2 As String = enc.GetString(bytes)
             Console.WriteLine(value2)
          Catch e As EncoderFallbackException
             Console.WriteLine("Unable to encode {0} at index {1}", 
                               If(e.IsUnknownSurrogate(), 
                                  String.Format("U+{0:X4} U+{1:X4}", 
                                                Convert.ToUInt16(e.CharUnknownHigh),
                                                Convert.ToUInt16(e.CharUnknownLow)),
                                  String.Format("U+{0:X4}", 
                                                Convert.ToUInt16(e.CharUnknown))),
                               e.Index)
          End Try
       End Sub
    End Module
    ' The example displays the following output:
    '       Unable to encode U+D802 at index 2
    

適用於

另請參閱