UnicodeEncoding.GetString(Byte[], Int32, Int32) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Decodiert einen Bytebereich von einem Bytearray in eine Zeichenfolge.
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
Parameter
- bytes
- Byte[]
Das Bytearray, das die Abfolge von Bytes enthält, die decodiert werden sollen.
- index
- Int32
Der Index des ersten zu decodierenden Bytes.
- count
- Int32
Die Anzahl der Bytes, die decodiert werden sollen.
Gibt zurück
Ein String Objekt, das die Ergebnisse der Decodierung der angegebenen Bytesequenz enthält.
- Attribute
Ausnahmen
bytes ist null (Nothing).
index oder count ist kleiner als Null.
-oder-
index und count keinen gültigen Bereich in bytes.
Fehlererkennung ist aktiviert und bytes enthält eine ungültige Bytesequenz.
Ein Fallback ist aufgetreten (weitere Informationen finden Sie unter "Zeichencodierung in .NET")
-und-
DecoderFallback ist auf DecoderExceptionFallback festgelegt.
Beispiele
Im folgenden Beispiel wird ein Array initialisiert, indem die GetByteCount Methode aufgerufen wird, um genau zu bestimmen, wie viele Bytes für eine codierte Zeichenfolge erforderlich sind, und dann die Größe der Bytereihenfolgemarke (BOM) hinzufügen. Anschließend ruft das Beispiel die Methode auf, um die GetPreamble BOM im Array zu speichern, bevor die GetBytes Methode aufgerufen wird, um die codierten Bytes im Array zu speichern. Anschließend wird die GetString Methode aufgerufen, um die Zeichenfolge zu decodieren.
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...
Beachten Sie, dass sich in diesem Fall die decodierte Zeichenfolge von der ursprünglichen Zeichenfolge unterscheidet, da sie mit einem 16-Bit-Byte-Byte-Orderzeichen U+FFFD beginnt. Dies bedeutet, dass die beiden Zeichenfolgen ungleich sind und wenn die Zeichenfolge ausgegeben wird, wird die BOM als Ersetzungszeichen "?" angezeigt. Um die BOM am Anfang der Zeichenfolge zu entfernen, können Sie die String.TrimStart Methode aufrufen.
Hinweise
Bei der Fehlererkennung führt eine ungültige Sequenz dazu, dass diese Methode eine ArgumentException. Ohne Fehlererkennung werden ungültige Sequenzen ignoriert, und es wird keine Ausnahme ausgelöst.
Wenn der zu decodierte Bytebereich die Bytereihenfolgemarke (BYM) und das Bytearray von einer Methode eines nicht bomfähigen Typs zurückgegeben wurde, wird das Zeichen U+FFFE in das von dieser Methode zurückgegebene Zeichenarray eingeschlossen. Sie können es entfernen, indem Sie die String.TrimStart Methode aufrufen.
Daten, die konvertiert werden sollen, z. B. Daten, die aus einem Datenstrom gelesen werden, sind möglicherweise nur in sequenziellen Blöcken verfügbar. In diesem Fall oder wenn die Datenmenge so groß ist, dass sie in kleinere Blöcke unterteilt werden muss, sollte die Anwendung das Decoder bzw. das Encoder von der GetDecoderGetEncoder Methode bereitgestellte Objekt verwenden.