UTF8Encoding.GetString(Byte[], Int32, Int32) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Decodifica um intervalo de bytes de uma matriz de bytes em uma cadeia de caracteres.
public:
override System::String ^ GetString(cli::array <System::Byte> ^ bytes, int index, int count);
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);
override this.GetString : byte[] * int * int -> string
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.GetString : byte[] * int * int -> string
Public Overrides Function GetString (bytes As Byte(), index As Integer, count As Integer) As String
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 String que contém os resultados da decodificação da sequência de bytes especificada.
- Atributos
Exceções
bytes
é null
.
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.
Ocorreu um fallback (saiba mais em Codificação de caracteres no .NET)
-e-
DecoderFallback é definido como DecoderExceptionFallback.
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...
Imports System.Text
Module Example
Public Sub Main()
Dim utf8 As New UTF8Encoding(True, True)
Dim s As String = "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.
Dim bytes(utf8.GetByteCount(s) + utf8.GetPreamble().Length - 1) As Byte
' 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.
Dim s2 As String = utf8.GetString(bytes, 0, bytes.Length)
Console.WriteLine(s2)
End Sub
End Module
' 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 uma exceção 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 for tão grande que precise ser dividida em blocos menores, use o Decoder ou o Encoder fornecido pelo GetDecoder método ou pelo GetEncoder método , respectivamente.