UTF8Encoding Classe

Definição

Representa uma codificação UTF-8 de caracteres Unicode.

public ref class UTF8Encoding : System::Text::Encoding
public class UTF8Encoding : System.Text.Encoding
[System.Serializable]
public class UTF8Encoding : System.Text.Encoding
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class UTF8Encoding : System.Text.Encoding
type UTF8Encoding = class
    inherit Encoding
[<System.Serializable>]
type UTF8Encoding = class
    inherit Encoding
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type UTF8Encoding = class
    inherit Encoding
Public Class UTF8Encoding
Inherits Encoding
Herança
UTF8Encoding
Atributos

Exemplos

O exemplo seguinte utiliza um UTF8Encoding objeto para codificar uma cadeia de caracteres Unicode e armazená-los num array de bytes. A cadeia Unicode inclui dois caracteres, Pi (U+03A0) e Sigma (U+03A3), que estão fora do intervalo de caracteres ASCII. Quando o array de bytes codificados é decodificado de volta para uma string, os caracteres Pi e Sigma continuam presentes.

using System;
using System.Text;

class Example
{
    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 has 2 characters outside the " +
            "ASCII range:\n" +
            "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:");
        for (int ctr = 0; ctr < encodedBytes.Length; ctr++) {
            Console.Write("{0:X2} ", encodedBytes[ctr]);
            if ((ctr + 1) %  25 == 0)
               Console.WriteLine();
        }
        Console.WriteLine();
        
        // Decode bytes back to string.
        String decodedString = utf8.GetString(encodedBytes);
        Console.WriteLine();
        Console.WriteLine("Decoded bytes:");
        Console.WriteLine(decodedString);
    }
}
// The example displays the following output:
//    Original string:
//    This Unicode string has 2 characters outside the ASCII range:
//    Pi (π), and Sigma (Σ).
//
//    Encoded bytes:
//    54 68 69 73 20 55 6E 69 63 6F 64 65 20 73 74 72 69 6E 67 20 68 61 73 20 32
//    20 63 68 61 72 61 63 74 65 72 73 20 6F 75 74 73 69 64 65 20 74 68 65 20 41
//    53 43 49 49 20 72 61 6E 67 65 3A 20 0D 0A 50 69 20 28 CE A0 29 2C 20 61 6E
//    64 20 53 69 67 6D 61 20 28 CE A3 29 2E
//
//    Decoded bytes:
//    This Unicode string has 2 characters outside the ASCII range:
//    Pi (π), and Sigma (Σ).
Imports System.Text

Class Example
    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 has 2 characters outside the " &
            "ASCII range: " & vbCrLf &
            "Pi (" & ChrW(&h03A0) & "), and Sigma (" & ChrW(&h03A3) & ")."
        Console.WriteLine("Original string:")
        Console.WriteLine(unicodeString)
        
        ' Encode the string.
        Dim encodedBytes As Byte() = utf8.GetBytes(unicodeString)
        Console.WriteLine()
        Console.WriteLine("Encoded bytes:")
        For ctr As Integer = 0 To encodedBytes.Length - 1
            Console.Write("{0:X2} ", encodedBytes(ctr))
            If (ctr + 1) Mod 25 = 0 Then Console.WriteLine
        Next
        Console.WriteLine()
        
        ' Decode bytes back to string.
        Dim decodedString As String = utf8.GetString(encodedBytes)
        Console.WriteLine()
        Console.WriteLine("Decoded bytes:")
        Console.WriteLine(decodedString)
    End Sub
End Class
' The example displays the following output:
'    Original string:
'    This Unicode string has 2 characters outside the ASCII range:
'    Pi (π), and Sigma (Σ).
'
'    Encoded bytes:
'    54 68 69 73 20 55 6E 69 63 6F 64 65 20 73 74 72 69 6E 67 20 68 61 73 20 32
'    20 63 68 61 72 61 63 74 65 72 73 20 6F 75 74 73 69 64 65 20 74 68 65 20 41
'    53 43 49 49 20 72 61 6E 67 65 3A 20 0D 0A 50 69 20 28 CE A0 29 2C 20 61 6E
'    64 20 53 69 67 6D 61 20 28 CE A3 29 2E
'
'    Decoded bytes:
'    This Unicode string has 2 characters outside the ASCII range:
'    Pi (π), and Sigma (Σ).

O exemplo seguinte usa a mesma cadeia de caracteres do exemplo anterior, exceto que escreve os bytes codificados num ficheiro e prefixa o fluxo de bytes com uma marca de ordem de bytes (BOM). Depois, lê o ficheiro de duas formas diferentes: como ficheiro de texto usando um StreamReader objeto; e como ficheiro binário. Como seria de esperar, nenhuma das sequências recém-lidas inclui a lista de materiais (BOM).

using System;
using System.IO;
using System.Text;

public class Example
{
   public static void Main()
   {
        // Create a UTF-8 encoding that supports a BOM.
        Encoding utf8 = new UTF8Encoding(true);

        // A Unicode string with two characters outside an 8-bit code range.
        String unicodeString =
            "This Unicode string has 2 characters outside the " +
            "ASCII range:\n" +
            "Pi (\u03A0)), and Sigma (\u03A3).";
        Console.WriteLine("Original string:");
        Console.WriteLine(unicodeString);
        Console.WriteLine();

        // Encode the string.
        Byte[] encodedBytes = utf8.GetBytes(unicodeString);
        Console.WriteLine("The encoded string has {0} bytes.",
                          encodedBytes.Length);
        Console.WriteLine();

        // Write the bytes to a file with a BOM.
        var fs = new FileStream(@".\UTF8Encoding.txt", FileMode.Create);
        Byte[] bom = utf8.GetPreamble();
        fs.Write(bom, 0, bom.Length);
        fs.Write(encodedBytes, 0, encodedBytes.Length);
        Console.WriteLine("Wrote {0} bytes to the file.", fs.Length);
        fs.Close();
        Console.WriteLine();

        // Open the file using StreamReader.
        var sr = new StreamReader(@".\UTF8Encoding.txt");
        String newString = sr.ReadToEnd();
        sr.Close();
        Console.WriteLine("String read using StreamReader:");
        Console.WriteLine(newString);
        Console.WriteLine();

        // Open the file as a binary file and decode the bytes back to a string.
        fs = new FileStream(@".\UTF8Encoding.txt", FileMode.Open);
        Byte[] bytes = new Byte[fs.Length];
        fs.Read(bytes, 0, (int)fs.Length);
        fs.Close();

        String decodedString = utf8.GetString(bytes);
        Console.WriteLine("Decoded bytes:");
        Console.WriteLine(decodedString);
   }
}
// The example displays the following output:
//    Original string:
//    This Unicode string has 2 characters outside the ASCII range:
//    Pi (π), and Sigma (Σ).
//
//    The encoded string has 88 bytes.
//
//    Wrote 91 bytes to the file.
//
//    String read using StreamReader:
//    This Unicode string has 2 characters outside the ASCII range:
//    Pi (π), and Sigma (Σ).
//
//    Decoded bytes:
//    This Unicode string has 2 characters outside the ASCII range:
//    Pi (π), and Sigma (Σ).
Imports System.IO
Imports System.Text

Class Example
    Public Shared Sub Main()
        ' Create a UTF-8 encoding that supports a BOM.
        Dim utf8 As New UTF8Encoding(True)
        
        ' A Unicode string with two characters outside an 8-bit code range.
        Dim unicodeString As String = _
            "This Unicode string has 2 characters outside the " &
            "ASCII range: " & vbCrLf &
            "Pi (" & ChrW(&h03A0) & "), and Sigma (" & ChrW(&h03A3) & ")."
        Console.WriteLine("Original string:")
        Console.WriteLine(unicodeString)
        Console.WriteLine()
        
        ' Encode the string.
        Dim encodedBytes As Byte() = utf8.GetBytes(unicodeString)
        Console.WriteLine("The encoded string has {0} bytes.",
                          encodedBytes.Length)
        Console.WriteLine()
        
        ' Write the bytes to a file with a BOM.
        Dim fs As New FileStream(".\UTF8Encoding.txt", FileMode.Create)
        Dim bom() As Byte = utf8.GetPreamble()
        fs.Write(bom, 0, bom.Length)
        fs.Write(encodedBytes, 0, encodedBytes.Length)
        Console.WriteLine("Wrote {0} bytes to the file.", fs.Length)
        fs.Close()
        Console.WriteLine()
        
        ' Open the file using StreamReader.
        Dim sr As New StreamReader(".\UTF8Encoding.txt")
        Dim newString As String = sr.ReadToEnd()
        sr.Close()
        Console.WriteLine("String read using StreamReader:")
        Console.WriteLine(newString)
        Console.WriteLine()
        
        ' Open the file as a binary file and decode the bytes back to a string.
        fs = new FileStream(".\UTF8Encoding.txt", FileMode.Open)
        Dim bytes(fs.Length - 1) As Byte
        fs.Read(bytes, 0, fs.Length)
        fs.Close()

        Dim decodedString As String = utf8.GetString(bytes)
        Console.WriteLine("Decoded bytes:")
        Console.WriteLine(decodedString)
    End Sub
End Class
' The example displays the following output:
'    Original string:
'    This Unicode string has 2 characters outside the ASCII range:
'    Pi (π), and Sigma (Σ).
'
'    The encoded string has 88 bytes.
'
'    Wrote 91 bytes to the file.
'
'    String read using StreamReader:
'    This Unicode string has 2 characters outside the ASCII range:
'    Pi (π), and Sigma (Σ).
'
'    Decoded bytes:
'    This Unicode string has 2 characters outside the ASCII range:
'    Pi (π), and Sigma (Σ).

Observações

A codificação é o processo de transformar um conjunto de caracteres Unicode em uma sequência de bytes. A descodificação é o processo de transformar uma sequência de bytes codificados num conjunto de caracteres Unicode.

UTF-8 é uma codificação Unicode que representa cada ponto de código como uma sequência de um a quatro bytes. Ao contrário das codificações UTF-16 e UTF-32, a codificação UTF-8 não requer "endianness"; O esquema de codificação é o mesmo independentemente de o processador ser big-endian ou little-endian. UTF8Encoding corresponde à página de códigos Windows 65001. Para mais informações sobre as UTFs e outras codificações suportadas por System.Text, consulte Codificação de Caracteres no Framework .NET.

Podes instanciar um UTF8Encoding objeto de várias formas, dependendo se queres que ele forneça uma marca de ordem de bytes (BOM) e se queres ativar a deteção de erros. A tabela seguinte lista os construtores e a Encoding propriedade que retornam um UTF8Encoding objeto.

Membro Lista técnica Deteção de erros
Encoding.UTF8 Yes Não (Substituição)
UTF8Encoding.UTF8Encoding() No Não (Substituição)
UTF8Encoding.UTF8Encoding(Boolean) Configurável Não (Substituição)
UTF8Encoding.UTF8Encoding(Boolean, Boolean) Configurável Configurável

O GetByteCount método determina quantos bytes resultam na codificação de um conjunto de caracteres Unicode, e o GetBytes método executa a codificação propriamente dita.

Da mesma forma, o GetCharCount método determina quantos caracteres resultam na decodificação de uma sequência de bytes, e os GetChars métodos e GetString executam a decodificação propriamente dita.

Para um codificador ou descodificador que consiga guardar informação de estado ao codificar ou decodificar dados que abrangem vários blocos (como uma cadeia de 1 milhão de caracteres codificada em segmentos de 100.000 caracteres), use as GetEncoder propriedades e GetDecoder respetivamente.

Opcionalmente, o UTF8Encoding objeto fornece uma marca de ordem de bytes (BOM), que é um array de bytes que pode ser prefixado ao início do fluxo de bytes resultante do processo de codificação. Se um fluxo de bytes codificado em UTF-8 for precedido por uma marca de ordem de bytes (BOM), ajuda o descodificador a determinar a ordem dos bytes e o formato de transformação ou UTF. Note-se, no entanto, que o Padrão Unicode não exige nem recomenda uma BOM em fluxos codificados em UTF-8. Para obter mais informações sobre a ordem de bytes e a marca de ordem de bytes, consulte O padrão Unicode na home page Unicode.

Se o codificador estiver configurado para fornecer uma lista de materiais (BOM), pode recuperá-la chamando o GetPreamble método; caso contrário, o método devolve um array vazio. Note que, mesmo que um UTF8Encoding objeto esteja configurado para suporte a listas de bebidas, deve incluir a lista de materiais no início do fluxo de bytes codificados, conforme apropriado; os métodos de codificação da UTF8Encoding classe não fazem isto automaticamente.

Atenção

Para permitir a deteção de erros e tornar a instância da classe mais segura, deve chamar o UTF8Encoding(Boolean, Boolean) construtor e definir o throwOnInvalidBytes parâmetro para true. Com a deteção de erros ativada, um método que deteta uma sequência inválida de caracteres ou bytes lança uma ArgumentException exceção. Sem deteção de erros, não é lançada nenhuma exceção, e a sequência inválida é geralmente ignorada.

Note

O estado de um objeto codificado em UTF-8 não é preservado se o objeto for serializado e desserializado usando diferentes versões do .NET Framework.

Construtores

Name Description
UTF8Encoding()

Inicializa uma nova instância da UTF8Encoding classe.

UTF8Encoding(Boolean, Boolean)

Inicializa uma nova instância da UTF8Encoding classe. Os parâmetros especificam se deve fornecer uma marca de ordem de byte Unicode e se deve lançar uma exceção quando é detetada uma codificação inválida.

UTF8Encoding(Boolean)

Inicializa uma nova instância da UTF8Encoding classe. Um parâmetro especifica se deve fornecer uma marca de ordem de bytes Unicode.

Propriedades

Name Description
BodyName

Quando sobrescrito numa classe derivada, obtém um nome para a codificação atual que pode ser usada com as tags do corpo do agente de correio.

(Herdado de Encoding)
CodePage

Quando sobrescrito numa classe derivada, obtém o identificador da página de código do atual Encoding.

(Herdado de Encoding)
DecoderFallback

Obtém ou define o DecoderFallback objeto para o objeto atual Encoding .

(Herdado de Encoding)
EncoderFallback

Obtém ou define o EncoderFallback objeto para o objeto atual Encoding .

(Herdado de Encoding)
EncodingName

Quando sobrescrito numa classe derivada, obtém a descrição legível por humanos da codificação atual.

(Herdado de Encoding)
HeaderName

Quando sobrescrito numa classe derivada, obtém um nome para a codificação atual que pode ser usado com etiquetas de cabeçalho de agente de correio.

(Herdado de Encoding)
IsBrowserDisplay

Quando sobrescrito numa classe derivada, obtém um valor que indica se a codificação atual pode ser usada pelos clientes do navegador para exibir conteúdo.

(Herdado de Encoding)
IsBrowserSave

Quando é sobreposto numa classe derivada, obtém um valor que indica se a codificação atual pode ser usada pelos clientes de navegador para guardar conteúdo.

(Herdado de Encoding)
IsMailNewsDisplay

Quando é sobreposto numa classe derivada, obtém um valor que indica se a codificação atual pode ser usada por clientes de email e notícias para exibir conteúdo.

(Herdado de Encoding)
IsMailNewsSave

Quando é sobreposto numa classe derivada, obtém um valor que indica se a codificação atual pode ser usada por clientes de email e notícias para guardar conteúdo.

(Herdado de Encoding)
IsReadOnly

Quando é sobreposto numa classe derivada, obtém um valor que indica se a codificação atual é apenas de leitura.

(Herdado de Encoding)
IsSingleByte

Quando sobrescrito numa classe derivada, obtém um valor que indica se a codificação atual utiliza pontos de código de um byte.

(Herdado de Encoding)
Preamble

Quando sobrescrito numa classe derivada, devolve um span contendo a sequência de bytes que especifica a codificação utilizada.

(Herdado de Encoding)
WebName

Quando é sobreposto numa classe derivada, o nome é registado junto da Internet Assigned Numbers Authority (IANA) para a codificação atual.

(Herdado de Encoding)
WindowsCodePage

Quando sobrescrito numa classe derivada, obtém a página de código do sistema operativo Windows que mais corresponde à codificação atual.

(Herdado de Encoding)

Métodos

Name Description
Clone()

Quando sobreposta numa classe derivada, cria-se uma cópia superficial do objeto atual Encoding .

(Herdado de Encoding)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual UTF8Encoding .

GetByteCount(Char[], Int32, Int32)

Calcula o número de bytes produzidos ao codificar um conjunto de caracteres a partir do array de caracteres especificado.

GetByteCount(Char[])

Quando sobrescrito numa classe derivada, calcula o número de bytes produzidos ao codificar todos os caracteres do array de caracteres especificado.

(Herdado de Encoding)
GetByteCount(Char*, Int32)

Calcula o número de bytes produzidos ao codificar um conjunto de caracteres a partir do ponteiro especificado.

GetByteCount(ReadOnlySpan<Char>)

Quando sobrescrito numa classe derivada, calcula o número de bytes produzidos pela codificação dos caracteres no intervalo de caracteres especificado.

(Herdado de Encoding)
GetByteCount(String, Int32, Int32)

Quando sobrescrito numa classe derivada, calcula o número de bytes produzidos ao codificar um conjunto de caracteres a partir da cadeia especificada.

(Herdado de Encoding)
GetByteCount(String)

Calcula o número de bytes produzidos ao codificar os caracteres no especificado String.

GetBytes(Char[], Int32, Int32, Byte[], Int32)

Codifica um conjunto de caracteres do array de caracteres especificado no array de bytes especificado.

GetBytes(Char[], Int32, Int32)

Quando sobrescrito numa classe derivada, codifica um conjunto de caracteres do array de caracteres especificado numa sequência de bytes.

(Herdado de Encoding)
GetBytes(Char[])

Quando sobrescrito numa classe derivada, codifica todos os caracteres do array de caracteres especificado numa sequência de bytes.

(Herdado de Encoding)
GetBytes(Char*, Int32, Byte*, Int32)

Codifica um conjunto de caracteres a partir do ponteiro especificado numa sequência de bytes que são armazenados a partir do ponteiro especificado.

GetBytes(ReadOnlySpan<Char>, Span<Byte>)

Quando sobrescrito numa classe derivada, codifica num espaço de bytes um conjunto de caracteres do intervalo de apenas leitura especificado.

(Herdado de Encoding)
GetBytes(String, Int32, Int32, Byte[], Int32)

Codifica um conjunto de caracteres do especificado String para o array de bytes especificado.

GetBytes(String, Int32, Int32)

Quando sobrescrito numa classe derivada, codifica num array de bytes o número de caracteres especificados por count na cadeia especificada, começando a partir do especificado index.

(Herdado de Encoding)
GetBytes(String)

Codifica os caracteres de um objeto especificado String numa sequência de bytes.

GetBytes(String)

Quando sobrescrito numa classe derivada, codifica todos os caracteres da cadeia especificada numa sequência de bytes.

(Herdado de Encoding)
GetCharCount(Byte[], Int32, Int32)

Calcula o número de caracteres produzidos ao descodificar uma sequência de bytes a partir do array de bytes especificado.

GetCharCount(Byte[])

Quando sobrescrito numa classe derivada, calcula o número de caracteres produzidos pela decodificação de todos os bytes no array de bytes especificado.

(Herdado de Encoding)
GetCharCount(Byte*, Int32)

Calcula o número de caracteres produzidos ao descodificar uma sequência de bytes a partir do ponteiro de bytes especificado.

GetCharCount(ReadOnlySpan<Byte>)

Quando sobrescrito numa classe derivada, calcula o número de caracteres produzidos ao descodificar o intervalo de bytes de apenas leitura fornecido.

(Herdado de Encoding)
GetChars(Byte[], Int32, Int32, Char[], Int32)

Descodifica uma sequência de bytes do array de bytes especificado para o array de caracteres especificado.

GetChars(Byte[], Int32, Int32)

Quando sobrescrito numa classe derivada, decodifica uma sequência de bytes do array de bytes especificado num conjunto de caracteres.

(Herdado de Encoding)
GetChars(Byte[])

Quando sobrescrito numa classe derivada, descodifica todos os bytes do array de bytes especificado num conjunto de caracteres.

(Herdado de Encoding)
GetChars(Byte*, Int32, Char*, Int32)

Decodifica uma sequência de bytes a partir do ponteiro de byte especificado num conjunto de caracteres que são armazenados a partir do ponteiro especificado.

GetChars(ReadOnlySpan<Byte>, Span<Char>)

Quando sobrescrito numa classe derivada, decodifica todos os bytes do intervalo de bytes especificado para apenas leitura num espaço de caracteres.

(Herdado de Encoding)
GetDecoder()

Obtém um descodificador que converte uma sequência de bytes codificada em UTF-8 numa sequência de caracteres Unicode.

GetEncoder()

Obtém um codificador que converte uma sequência de caracteres Unicode numa sequência de bytes codificada em UTF-8.

GetHashCode()

Devolve o código hash da instância atual.

GetMaxByteCount(Int32)

Calcula o número máximo de bytes produzidos codificando o número especificado de caracteres.

GetMaxCharCount(Int32)

Calcula o número máximo de caracteres produzidos ao descodificar o número especificado de bytes.

GetPreamble()

Devolve uma marca de ordem de byte Unicode codificada no formato UTF-8, se o UTF8Encoding objeto de codificação estiver configurado para fornecer uma.

GetString(Byte[], Int32, Int32)

Descodifica um intervalo de bytes de um array de bytes para uma cadeia.

GetString(Byte[], Int32, Int32)

Quando sobrescrito numa classe derivada, decodifica uma sequência de bytes do array de bytes especificado numa cadeia.

(Herdado de Encoding)
GetString(Byte[])

Quando sobrescrito numa classe derivada, decodifica todos os bytes do array de bytes especificado numa string.

(Herdado de Encoding)
GetString(Byte*, Int32)

Quando é sobreposto numa classe derivada, decodifica um número especificado de bytes começando num endereço especificado numa cadeia.

(Herdado de Encoding)
GetString(ReadOnlySpan<Byte>)

Quando sobrescrito numa classe derivada, decodifica todos os bytes do intervalo de bytes especificado numa string.

(Herdado de Encoding)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsAlwaysNormalized()

Recebe um valor que indica se a codificação atual está sempre normalizada, usando a forma de normalização por defeito.

(Herdado de Encoding)
IsAlwaysNormalized(NormalizationForm)

Quando sobrescrito numa classe derivada, obtém um valor que indica se a codificação atual está sempre normalizada, usando a forma de normalização especificada.

(Herdado de Encoding)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Ver também