UnicodeEncoding.GetString(Byte[], Int32, Int32) Método

Definição

Decodifica um intervalo de bytes de uma matriz de bytes em uma cadeia de caracteres.

public override string GetString (byte[] bytes, int index, int count);
[System.Runtime.InteropServices.ComVisible(false)]
public override string GetString (byte[] bytes, int index, int count);

Parâmetros

bytes
Byte[]

A matriz de bytes que contém a sequência de bytes a ser decodificada.

index
Int32

O índice do primeiro byte a ser decodificado.

count
Int32

O número de bytes a serem decodificados.

Retornos

Um objeto String que contém os resultados da decodificação da sequência de bytes especificada.

Atributos

Exceções

bytes é null (Nothing).

index ou count é menor que zero.

- ou -

index e count não denotam um intervalo válido em bytes.

A detecção de erros está habilitada e bytes contém uma sequência de bytes inválida.

Exemplos

O exemplo a seguir inicializa uma matriz chamando o GetByteCount método para determinar exatamente quantos bytes são necessários para uma cadeia de caracteres codificada e, em seguida, adicionando o tamanho da marca de ordem de bytes (BOM). Em seguida, o exemplo chama o GetPreamble método para armazenar o BOM na matriz antes de chamar o GetBytes método para armazenar os bytes codificados na matriz. Em seguida, o exemplo chama o GetString método para decodificar a cadeia de caracteres.

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      UTF8Encoding utf8 = new UTF8Encoding(true, true);

      String s = "It was the best of times, it was the worst of times...";

      // We need to dimension the array, since we'll populate it with 2 method calls.
      Byte[] bytes = new Byte[utf8.GetByteCount(s) + utf8.GetPreamble().Length];
      // Encode the string.
      Array.Copy(utf8.GetPreamble(), bytes, utf8.GetPreamble().Length);
      utf8.GetBytes(s, 0, s.Length, bytes, utf8.GetPreamble().Length);

      // Decode the byte array.
      String s2 = utf8.GetString(bytes, 0, bytes.Length);
      Console.WriteLine(s2);
   }
}
// The example displays the following output:
//        ?It was the best of times, it was the worst of times...

Observe que, nesse caso, a cadeia de caracteres decodificada difere da cadeia de caracteres original, pois ela começa com uma marca de ordem de bytes de 16 bits U+FFFD. Isso significa que as duas cadeias de caracteres serão comparadas como desiguais e que, se a cadeia de caracteres for saída, a BOM será exibida como o caractere de substituição "?". Para remover o BOM no início da cadeia de caracteres, você pode chamar o String.TrimStart método .

Comentários

Com a detecção de erros, uma sequência inválida faz com que esse método gere um ArgumentException. Sem detecção de erros, sequências inválidas são ignoradas e nenhuma exceção é gerada.

Se o intervalo de bytes a serem decodificados incluir a marca de ordem de byte (BOM) e a matriz de bytes tiver sido retornada por um método de um tipo sem reconhecimento bom, o caractere U+FFFE será incluído na matriz de caracteres retornada por esse método. Você pode removê-lo chamando o String.TrimStart método .

Os dados a serem convertidos, como dados lidos de um fluxo, podem estar disponíveis apenas em blocos sequenciais. Nesse caso, ou se a quantidade de dados é tão grande que precisa ser dividida em blocos menores, o aplicativo deve usar o Decoder objeto ou Encoder fornecido pelo GetDecoder método ou GetEncoder , respectivamente.

Aplica-se a

Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Confira também