UnicodeEncoding Classe

Definição

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

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

Exemplos

O exemplo seguinte demonstra como codificar uma cadeia de caracteres Unicode num array de bytes usando um UnicodeEncoding objeto. O array de bytes é descodificado numa string para demonstrar que não há perda de dados.

using System;
using System.Text;

class UnicodeEncodingExample {
    public static void Main() {
        // The encoding.
        UnicodeEncoding unicode = new UnicodeEncoding();
        
        // Create a string that contains Unicode characters.
        String unicodeString =
            "This Unicode string contains two characters " +
            "with codes outside the traditional ASCII code range, " +
            "Pi (\u03a0) and Sigma (\u03a3).";
        Console.WriteLine("Original string:");
        Console.WriteLine(unicodeString);

        // Encode the string.
        Byte[] encodedBytes = unicode.GetBytes(unicodeString);
        Console.WriteLine();
        Console.WriteLine("Encoded bytes:");
        foreach (Byte b in encodedBytes) {
            Console.Write("[{0}]", b);
        }
        Console.WriteLine();
        
        // Decode bytes back to string.
        // Notice Pi and Sigma characters are still present.
        String decodedString = unicode.GetString(encodedBytes);
        Console.WriteLine();
        Console.WriteLine("Decoded bytes:");
        Console.WriteLine(decodedString);
    }
}
Imports System.Text
Imports Microsoft.VisualBasic.Strings

Class UnicodeEncodingExample
    
    Public Shared Sub Main()
        ' The encoding.
        Dim uni As New UnicodeEncoding()
        
        ' Create a string that contains Unicode characters.
        Dim unicodeString As String = _
            "This Unicode string contains two characters " & _
            "with codes outside the traditional ASCII code range, " & _
            "Pi (" & ChrW(928) & ") and Sigma (" & ChrW(931) & ")."
        Console.WriteLine("Original string:")
        Console.WriteLine(unicodeString)
        
        ' Encode the string.
        Dim encodedBytes As Byte() = uni.GetBytes(unicodeString)
        Console.WriteLine()
        Console.WriteLine("Encoded bytes:")
        Dim b As Byte
        For Each b In  encodedBytes
            Console.Write("[{0}]", b)
        Next b
        Console.WriteLine()
        
        ' Decode bytes back to string.
        ' Notice Pi and Sigma characters are still present.
        Dim decodedString As String = uni.GetString(encodedBytes)
        Console.WriteLine()
        Console.WriteLine("Decoded bytes:")
        Console.WriteLine(decodedString)
    End Sub
End Class

O exemplo seguinte usa a mesma cadeia de caracteres do 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-16 encoding that supports a BOM.
        Encoding unicode = new UnicodeEncoding();

        // 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 = unicode.GetBytes(unicodeString);
        Console.WriteLine("The encoded string has {0} bytes.\n",
                          encodedBytes.Length);

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

        // 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 = unicode.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 172 bytes.
//
//    Wrote 174 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-16 encoding that supports a BOM.
        Dim unicode As New UnicodeEncoding()
        
        ' 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() = unicode.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(".\UnicodeEncoding.txt", FileMode.Create)
        Dim bom() As Byte = unicode.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(".\UnicodeEncoding.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(".\UnicodeEncoding.txt", FileMode.Open)
        Dim bytes(fs.Length - 1) As Byte
        fs.Read(bytes, 0, fs.Length)
        fs.Close()

        Dim decodedString As String = unicode.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 172 bytes.
'
'    Wrote 174 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.

O Padrão Unicode atribui um ponto de código (um número) a cada carácter em cada script suportado. Um Formato de Transformação Unicode (UTF) é uma forma de codificar esse ponto de código. O Padrão Unicode utiliza os seguintes UTFs:

  • UTF-8, que representa cada ponto de código como uma sequência de um a quatro bytes.

  • UTF-16, que representa cada ponto de código como uma sequência de um a dois inteiros de 16 bits.

  • UTF-32, que representa cada ponto de código como um inteiro de 32 bits.

Para mais informações sobre as UTFs e outras codificações suportadas por System.Text, consulte Codificação de Caracteres no Framework .NET.

A UnicodeEncoding classe representa uma codificação UTF-16. O codificador pode usar ordem de bytes big endian (byte mais significativo primeiro) ou ordem de bytes little endian (byte mínimo significativo primeiro). Por exemplo, a letra maiúscula latina A (ponto de código U+0041) é serializada da seguinte forma (em hexadecimal):

  • Ordem dos bytes big endian: 00 00 00 41

  • Ordem de bytes do little endian: 41 00 00 00

É geralmente mais eficiente armazenar caracteres Unicode usando a ordem nativa dos bytes de uma determinada plataforma. Por exemplo, é melhor usar a ordem de bytes little endian em plataformas little endian, tais como computadores Intel. A classe UnicodeEncoding corresponde às páginas de código Windows 1200 (ordem dos bytes little endian) e 1201 (ordem dos bytes big endian). Pode determinar a "endianidade" de uma determinada arquitetura chamando o BitConverter.IsLittleEndian método.

Opcionalmente, o UnicodeEncoding objeto fornece uma marca de ordem de bytes (BOM), que é um array de bytes que pode ser prefixado à sequência de bytes resultante do processo de codificação. Se o preâmbulo contiver uma marca de ordem de bytes (BOM), ajuda o descodificador a determinar a ordem dos bytes e o formato de transformação ou UTF.

Se a UnicodeEncoding instância estiver configurada 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 UnicodeEncoding 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 UnicodeEncoding 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 instanciar um UnicodeEncoding objeto chamando o UnicodeEncoding(Boolean, Boolean, Boolean) construtor e definindo o seu throwOnInvalidBytes argumento para true. Com a deteção de erros, um método que deteta uma sequência inválida de caracteres ou bytes lança um ArgumentException. Sem deteção de erros, não é lançada nenhuma exceção, e a sequência inválida é geralmente ignorada.

Podes instanciar um UnicodeEncoding objeto de várias formas, dependendo se queres que ele forneça uma marca de ordem de bytes (BOM), se queres codificação big-endian ou little-endian, e se queres ativar a deteção de erros. A tabela seguinte lista os UnicodeEncoding construtores e as Encoding propriedades que retornam um UnicodeEncoding objeto.

Membro Endianness Lista técnica Deteção de erros
BigEndianUnicode Big-endian Yes Não (Substituição)
Encoding.Unicode Little-endian (ordem de bytes do menor para o maior) Yes Não (Substituição)
UnicodeEncoding.UnicodeEncoding() Little-endian (ordem de bytes do menor para o maior) Yes Não (Substituição)
UnicodeEncoding(Boolean, Boolean) Configurável Configurável Não (Substituição)
UnicodeEncoding.UnicodeEncoding(Boolean, Boolean, Boolean) Configurável 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.

Construtores

Name Description
UnicodeEncoding()

Inicializa uma nova instância da UnicodeEncoding classe.

UnicodeEncoding(Boolean, Boolean, Boolean)

Inicializa uma nova instância da UnicodeEncoding classe. Os parâmetros especificam se deve usar a ordem dos bytes big endian, se deve fornecer uma marca de ordem de bytes Unicode e se deve lançar uma exceção quando é detetada uma codificação inválida.

UnicodeEncoding(Boolean, Boolean)

Inicializa uma nova instância da UnicodeEncoding classe. Os parâmetros especificam se deve usar a ordem dos bytes big endian e se o GetPreamble() método retorna uma marca de ordem de bytes Unicode.

Campos

Name Description
CharSize

Representa o tamanho do carácter Unicode em bytes. Este campo é constante.

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 especificado Object é igual ao objeto atual UnicodeEncoding .

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(Char*, Int32)

Quando sobrescrito numa classe derivada, calcula o número de bytes produzidos ao codificar um conjunto de caracteres a partir do ponteiro especificado.

(Herdado de Encoding)
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 na cadeia especificada.

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(Char*, Int32, Byte*, Int32)

Quando sobrescrito numa classe derivada, codifica um conjunto de caracteres a partir do ponteiro especificado numa sequência de bytes que são armazenados a partir do ponteiro de byte especificado.

(Herdado de Encoding)
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 um conjunto de caracteres da cadeia especificada para o array de bytes especificado.

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(Byte*, Int32)

Quando sobrescrito numa classe derivada, calcula o número de caracteres produzidos ao decodificar uma sequência de bytes começando no ponteiro de byte especificado.

(Herdado de Encoding)
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(Byte*, Int32, Char*, Int32)

Quando sobrescrito numa classe derivada, decodifica uma sequência de bytes a partir do ponteiro de byte especificado para um conjunto de caracteres que são armazenados a partir do ponteiro especificado.

(Herdado de Encoding)
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-16 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-16.

GetEncoder()

Quando sobrescrito numa classe derivada, obtém-se um codificador que converte uma sequência de caracteres Unicode numa sequência codificada de bytes.

(Herdado de Encoding)
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-16, se o construtor desta instância solicitar uma marca de ordem de byte.

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