Udostępnij za pośrednictwem


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

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

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

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

-I-

DecoderFallback jest ustawiona na DecoderExceptionFallbackwartość .

Przykłady

Poniższy przykład inicjuje tablicę przez wywołanie GetByteCount metody w celu określenia dokładnie liczby bajtów wymaganych dla zakodowanego ciągu, a następnie dodania rozmiaru znaku kolejności bajtów (BOM). Następnie przykład wywołuje metodę GetPreamble do przechowywania obiektu BOM w tablicy przed wywołaniem GetBytes metody do przechowywania zakodowanych bajtów w tablicy. W tym przykładzie GetString wywołana jest metoda 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 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ąć 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 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, które mają zostać zdekodowane, zawiera znak kolejności bajtów (BOM), a tablica bajtów została zwrócona przez metodę typu rozpoznawczego innego niż BOM, znak U+FFFE jest uwzględniony w tablicy znaków zwracanej przez tę metodę. Można go usunąć, wywołując metodę String.TrimStart .

Dane, które mają być konwertowane, 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 być podzielona na mniejsze bloki, użyj Decoder wartości lub Encoder dostarczonej GetDecoder odpowiednio przez metodę lub GetEncoder metodę.

Dotyczy

Zobacz też