UTF8Encoding.GetString(Byte[], Int32, Int32) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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 bytes
elemecie .
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ę.