UnicodeEncoding.GetString(Byte[], Int32, Int32) Metoda

Definicja

Dekoduje zakres bajtów z tablicy bajtów do ciągu.

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

Parametry

bytes
Byte[]

Tablica bajtów zawierająca sekwencję bajtów do dekodowania.

index
Int32

Indeks pierwszego bajtu do dekodowania.

count
Int32

Liczba bajtów do dekodowania.

Zwraca

String Obiekt zawierający wyniki dekodowania określonej sekwencji bajtów.

Atrybuty

Wyjątki

bytes is null (Nothing).

index lub count jest mniejsza niż zero.

— lub —

index i count nie oznaczają prawidłowego zakresu w elem bytes.

Wykrywanie błędów jest włączone i bytes zawiera nieprawidłową sekwencję bajtów.

Wystąpił powrót (aby uzyskać więcej informacji, zobacz Kodowanie znaków na platformie .NET)

— i —

DecoderFallback jest ustawiony na DecoderExceptionFallback.

Przykłady

Poniższy przykład inicjuje tablicę przez wywołanie GetByteCount metody w celu określenia dokładnie, ile bajtów jest wymaganych dla zakodowanego ciągu, a następnie dodanie rozmiaru znaku kolejności bajtów (BOM). W tym przykładzie wywołamy metodę GetPreamble w celu zapisania modelu BOM do tablicy przed wywołaniem GetBytes metody w celu zapisania zakodowanych bajtów do tablicy. W tym przykładzie metoda wywołuje metodę GetString w celu dekodowania ciągu.

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

Należy pamiętać, że w tym przypadku dekodowany ciąg różni się od oryginalnego ciągu, ponieważ zaczyna się od 16-bitowego znaku kolejności bajtów U+FFFD. Oznacza to, że dwa ciągi będą porównywane jako nierówne, a jeśli ciąg jest wynikiem, BOM będzie wyświetlany jako znak zastępczy "?". Aby usunąć obiekt BOM na początku ciągu, możesz wywołać metodę String.TrimStart .

Uwagi

W przypadku wykrywania błędów nieprawidłowa sekwencja powoduje, że ta metoda zgłasza błąd ArgumentException. Bez wykrywania błędów nieprawidłowe sekwencje są ignorowane i nie jest zgłaszany żaden wyjątek.

Jeśli zakres bajtów do dekodowania zawiera znak kolejności bajtów (BOM), a tablica bajtów została zwrócona przez metodę typu innego niż BOM, znak U+FFFE jest uwzględniony w tablicy znaków zwracanej przez tę metodę. Możesz go usunąć, wywołując metodę String.TrimStart .

Dane do przekonwertowania, takie jak dane odczytywane ze strumienia, mogą być dostępne tylko w blokach sekwencyjnych. W takim przypadku lub jeśli ilość danych jest tak duża, że musi zostać podzielona na mniejsze bloki, aplikacja powinna użyć Decoder odpowiednio obiektu lub Encoder dostarczonego GetDecoder przez metodę lub GetEncoder .

Dotyczy

Zobacz też