UTF8Encoding.GetEncoder Metoda

Definice

Získá kodér, který převádí sekvenci znaků Unicode na sekvenci bajtů zakódovanou kódováním UTF-8.

public:
 override System::Text::Encoder ^ GetEncoder();
public override System.Text.Encoder GetEncoder ();
override this.GetEncoder : unit -> System.Text.Encoder
Public Overrides Function GetEncoder () As Encoder

Návraty

Encoder

A Encoder , která převádí posloupnost znaků Unicode na posloupnost kódování UTF-8 bajtů.

Příklady

Následující příklad používá metodu GetEncoder k získání kodéru k převodu posloupnosti znaků na UTF-8 zakódovanou sekvenci bajtů.

using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
   array<Char>^chars = {'a','b','c',L'\u0300',L'\ua0a0'};
   array<Byte>^bytes;
   Encoder^ utf8Encoder = Encoding::UTF8->GetEncoder();
   int byteCount = utf8Encoder->GetByteCount( chars, 2, 3, true );
   bytes = gcnew array<Byte>(byteCount);
   int bytesEncodedCount = utf8Encoder->GetBytes( chars, 2, 3, bytes, 0, true );
   Console::WriteLine( "{0} bytes used to encode characters.", bytesEncodedCount );
   Console::Write( "Encoded bytes: " );
   IEnumerator^ myEnum = bytes->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Byte b = safe_cast<Byte>(myEnum->Current);
      Console::Write( "[{0}]", b );
   }

   Console::WriteLine();
}
using System;
using System.Text;

class UTF8EncodingExample {
    public static void Main() {
        Char[] chars = new Char[] {'a', 'b', 'c', '\u0300', '\ua0a0'};
        Byte[] bytes;

        Encoder utf8Encoder = Encoding.UTF8.GetEncoder();

        int byteCount = utf8Encoder.GetByteCount(chars, 2, 3, true);
        bytes = new Byte[byteCount];
        int bytesEncodedCount = utf8Encoder.GetBytes(chars, 2, 3, bytes, 0, true);

        Console.WriteLine(
            "{0} bytes used to encode characters.", bytesEncodedCount
        );

        Console.Write("Encoded bytes: ");
        foreach (Byte b in bytes) {
            Console.Write("[{0}]", b);
        }
        Console.WriteLine();
    }
}
Imports System.Text
Imports Microsoft.VisualBasic.Strings

Class UTF8EncodingExample
    
    Public Shared Sub Main()
        'Characters:
        ' ChrW(97) = a
        ' ChrW(98) = b
        ' ChrW(99) = c
        ' ChrW(768) = `
        ' ChrW(41120) = valid unicode code point, but not a character
        Dim chars() As Char = {ChrW(97), ChrW(98), ChrW(99), ChrW(768), ChrW(41120)}
        Dim bytes() As Byte
        
        Dim utf8Encoder As Encoder = Encoding.UTF8.GetEncoder()
        
        Dim byteCount As Integer = utf8Encoder.GetByteCount(chars, 2, 3, True)
        bytes = New Byte(byteCount - 1) {}
        Dim bytesEncodedCount As Integer = utf8Encoder.GetBytes( _
            chars, 2, 3, bytes, 0, True _
        )
        
        Console.WriteLine("{0} bytes used to encode characters.", bytesEncodedCount)
        
        Console.Write("Encoded bytes: ")
        Dim b As Byte
        For Each b In  bytes
            Console.Write("[{0}]", b)
        Next b
        Console.WriteLine()
    End Sub
End Class

Poznámky

Metoda Encoder.GetBytes převádí sekvenční bloky znaků na sekvenční bloky bajtů způsobem podobným GetBytes metodě. Udržuje však informace o stavu mezi voláními, aby bylo možné správně zakódovat sekvence znaků, Encoder které pokrývají bloky. Také Encoder zachovává koncové znaky na konci datových bloků a používá koncové znaky v další operaci kódování. Například datový blok může končit nesrovnaným vysokým náhradním kódem a odpovídající nízká náhrada může být v dalším datovém bloku. Proto jsou užitečné pro GetEncoder síťové přenosy a operace se soubory, GetDecoder protože tyto operace často zpracovávají bloky dat místo kompletního datového proudu.

Pokud je povolena detekce chyb, to znamená, throwOnInvalidCharacters že parametr konstruktoru je nastaven na true, detekce chyb je také povolena ve Encoder vrácených touto metodou. Pokud je povolena detekce chyb a dojde k neplatné sekvenci, stav kodéru není definován a zpracování se musí zastavit.

Platí pro

Viz také