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

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

Atrybuty

Wyjątki

bytes to null.

index wartość lub count jest mniejsza niż zero.

-lub- index i count nie oznaczają prawidłowego zakresu w elemecie 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 parametr jest ustawiony na DecoderExceptionFallbackwartość .

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 bajtowego znacznika kolejności (BOM). W tym przykładzie GetPreamble metoda jest następnie wywoływana w celu zapisania modelu BOM do tablicy przed wywołaniem GetBytes metody do przechowywania zakodowanych bajtów w tablicy. W tym przykładzie metoda wywołuje metodę GetString , aby zdekodować ciąg.

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 zdekodowany 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 i że jeśli ciąg jest wynikiem, model BOM będzie wyświetlany jako znak zastępczy "?". Aby usunąć model 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 ArgumentException wyjątek. 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 tym przypadku lub jeśli ilość danych jest tak duża, że musi być podzielona na mniejsze bloki, użyj Decoder metody lub Encoder dostarczonej GetDecoder odpowiednio przez metodę lub GetEncoder metodę.

Dotyczy

Zobacz też