Encoding.UTF8 Eigenschap

Definitie

Hiermee haalt u een codering op voor de UTF-8-indeling.

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

Waarde van eigenschap

Een codering voor de UTF-8-indeling.

Voorbeelden

In het volgende voorbeeld wordt een matrix gedefinieerd die uit de volgende tekens bestaat:

  • LATIJNSE KLEINE LETTER Z (U+007A)

  • LATIJNSE KLEINE LETTER A (U+0061)

  • BREVE COMBINEREN (U+0306)

  • LATIJNSE KLEINE LETTER AE MET ACUTE (U+01FD)

  • GRIEKSE KLEINE LETTER BETA (U+03B2)

  • Een surrogaatpaar (U+D800 U+DD54) dat GRIEKSE ACROPHONIC ATTIC 10154 (U+10154) vormt.

Hiermee worden de UTF-16-code-eenheden van elk teken weergegeven en wordt het aantal bytes bepaald dat door een UTF-8-encoder is vereist om de tekenmatrix te coderen. Vervolgens worden de tekens gecodeerd en worden de resulterende UTF-8-gecodeerde bytes weergegeven.

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

Opmerkingen

Deze eigenschap retourneert een UTF8Encoding object dat Unicode-tekens (UTF-16-gecodeerde) codeert in een reeks van één tot vier bytes per teken en waarmee een UTF-8-gecodeerde bytematrix wordt gedecodeerd naar Unicode-tekens (UTF-16-gecodeerd). Zie Character Encoding in .NET voor informatie over de tekencoderingen die worden ondersteund door .NET en een discussie over welke Unicode-codering moet worden gebruikt.

Het UTF8Encoding object dat door deze eigenschap wordt geretourneerd, heeft mogelijk niet het juiste gedrag voor uw app.

  • Het retourneert een UTF8Encoding object dat een Unicode byte order mark (BOM) levert. Als u een UTF8-codering wilt instantiëren die geen bom biedt, roept u een overbelasting van de UTF8Encoding constructor aan.

  • Het retourneert een UTF8Encoding object dat gebruikmaakt van vervangende terugval om elke tekenreeks te vervangen die niet kan worden gecodeerd en elke byte die het niet kan decoderen met een vraagteken ('?'). In plaats daarvan kunt u de UTF8Encoding.UTF8Encoding(Boolean, Boolean) constructor aanroepen om een UTF8Encoding object te instantiëren waarvan de terugval een EncoderFallbackException of een DecoderFallbackExceptionis, zoals in het volgende voorbeeld wordt geïllustreerd.

    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
    

Van toepassing op

Zie ook