Partilhar via


UTF8Encoding.GetEncoder Método

Definição

Obtém um codificador que converte uma sequência de caracteres Unicode em uma sequência de bytes codificada em 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

Retornos

Encoder

Um Encoder que converte uma sequência de caracteres Unicode em uma sequência de bytes codificada em UTF-8.

Exemplos

O exemplo a seguir usa o GetEncoder método para obter um codificador para converter uma sequência de caracteres em uma sequência codificada utf-8 de bytes.

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

Comentários

O Encoder.GetBytes método converte blocos sequenciais de caracteres em blocos sequenciais de bytes, de maneira semelhante ao GetBytes método. No entanto, um Encoder mantém informações de estado entre chamadas para que possa codificar corretamente sequências de caracteres que abrangem blocos. O Encoder também preserva os caracteres à direita no final dos blocos de dados e usa os caracteres à direita na próxima operação de codificação. Por exemplo, um bloco de dados pode terminar com um substituto alto inigualável e o substituto baixo correspondente pode estar no próximo bloco de dados. Portanto, GetDecoder e GetEncoder são úteis para a transmissão de rede e operações de arquivo, pois essas operações geralmente lidam com blocos de dados em vez de um fluxo de dados completo.

Se a detecção de erro estiver habilitada, ou seja, o throwOnInvalidCharacters parâmetro do construtor será definido como, a truedetecção de erros também será habilitada no Encoder retornado por esse método. Se a detecção de erro estiver habilitada e uma sequência inválida for encontrada, o estado do codificador será indefinido e o processamento deverá ser interrompido.

Aplica-se a

Confira também