UnicodeEncoding.GetString(Byte[], Int32, Int32) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Descodifica um intervalo de bytes de um array de bytes para uma cadeia.
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[]
O array de bytes que contém a sequência de bytes a decodificar.
- index
- Int32
O índice do primeiro byte a descodificar.
- count
- Int32
O número de bytes a descodificar.
Devoluções
Um String objeto contendo os resultados da decodificação da sequência especificada de bytes.
- Atributos
Exceções
bytes é null (Nothing).
index ou count é inferior a zero.
-ou-
index e count não denotam um intervalo válido em bytes.
A deteção de erros está ativada e bytes contém uma sequência inválida de bytes.
Ocorreu um recurso de recurso (para mais informações, veja Codificação de Caracteres em .NET)
- e -
DecoderFallback está definido como DecoderExceptionFallback.
Exemplos
O exemplo seguinte inicializa um array chamando o GetByteCount método para determinar exatamente quantos bytes são necessários para uma cadeia codificada e depois somando o tamanho da marca de ordem dos bytes (BOM). O exemplo chama então o GetPreamble método para armazenar a BOM no array antes de chamar o GetBytes método para armazenar os bytes codificados no array. O exemplo chama então o GetString método para decodificar a cadeia.
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...
Note-se que, neste caso, a cadeia decodificada difere da cadeia original, pois começa com uma marca de ordem de bytes de 16 bits U+FFFD. Isto significa que as duas cadeias se compararão como desiguais e, se a cadeia for produzida, a BOM será apresentada como o carácter de substituição "?". Para remover a lista de materiais no início da cadeia, pode chamar o String.TrimStart método.
Observações
Com a deteção de erros, uma sequência inválida faz com que este método execute um ArgumentException. Sem deteção de erros, as sequências inválidas são ignoradas e nenhuma exceção é lançada.
Se o intervalo de bytes a decodificar incluir a marca de ordem de bytes (BOM) e o array de bytes for devolvido por um método de tipo não conhecido pela BOM, o carácter U+FFFE é incluído no array de caracteres devolvido por este método. Podes removê-lo chamando o String.TrimStart método.
Os dados a converter, como dados lidos de um fluxo, podem estar disponíveis apenas em blocos sequenciais. Neste caso, ou se a quantidade de dados for tão grande que precisa de ser dividida em blocos mais pequenos, a aplicação deve usar o Decoder ou o Encoder objeto fornecido pelo GetDecoder ou pelo GetEncoder método, respetivamente.