Compartir vía


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

Definición

Descodifica un intervalo de bytes de una matriz de bytes en una cadena.

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[]

Matriz de bytes que contiene la secuencia de bytes que se va a descodificar.

index
Int32

Índice del primer byte que se va a descodificar.

count
Int32

Número de bytes que se van a descodificar.

Devoluciones

Objeto String que contiene los resultados obtenidos al descodificar la secuencia de bytes especificada.

Atributos

Excepciones

bytes es null (Nothing).

index o count es menor que cero.

O bien

index y count no denotan un intervalo válido en bytes.

Está habilitada la detección de errores, y bytes contiene una secuencia de bytes no válida.

Se ha producido una reserva (para más información, vea Codificación de caracteres en .NET)

- y -

El valor de DecoderFallback está establecido en DecoderExceptionFallback.

Ejemplos

En el ejemplo siguiente se inicializa una matriz mediante una llamada al GetByteCount método para determinar exactamente cuántos bytes se necesitan para una cadena codificada y, a continuación, se agrega el tamaño de la marca de orden de bytes (BOM). A continuación, el ejemplo llama al GetPreamble método para almacenar la lista de materiales en la matriz antes de llamar al GetBytes método para almacenar los bytes codificados en la matriz. A continuación, el ejemplo llama al GetString método para descodificar la cadena.

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...

Tenga en cuenta que, en este caso, la cadena descodificada difiere de la cadena original, ya que comienza con una marca de orden de bytes de 16 bits U+FFFD. Esto significa que las dos cadenas se compararán como desiguales y que, si la cadena es la salida, la boM se mostrará como el carácter de reemplazo "?". Para quitar la lista de materiales al principio de la cadena, puede llamar al String.TrimStart método .

Comentarios

Con la detección de errores, una secuencia no válida hace que este método produzca una ArgumentExceptionexcepción . Sin la detección de errores, se omiten las secuencias no válidas y no se produce ninguna excepción.

Si el intervalo de bytes que se va a descodificar incluye la marca de orden de bytes (BOM) y la matriz de bytes fue devuelta por un método de un tipo que no tenga en cuenta la lista de materiales, el carácter U+FFFE se incluye en la matriz de caracteres devuelta por este método. Para quitarlo, llame al String.TrimStart método .

Los datos que se van a convertir, como los datos leídos de una secuencia, pueden estar disponibles solo en bloques secuenciales. En este caso, o si la cantidad de datos es tan grande que debe dividirse en bloques más pequeños, la aplicación debe usar el Decoder objeto o Encoder proporcionado por el GetDecoderGetEncoder método o , respectivamente.

Se aplica a

Consulte también