UTF32Encoding.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);
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
Ciąg zawierający wyniki dekodowania określonej sekwencji bajtów.
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ł powrót (aby uzyskać więcej informacji, zobacz Kodowanie znaków na platformie .NET , aby uzyskać pełne wyjaśnienie).
-I-
DecoderFallback jest ustawiona na DecoderExceptionFallbackwartość .
Przykłady
Poniższy przykład koduje ciąg do dwóch tablic bajtów, jeden w kolejności małej i drugiej w kolejności big-endian. Następnie dekoduje bajty z powrotem do ciągu.
using System;
using System.Text;
public class Example
{
public static void Main()
{
// Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
UTF32Encoding u32LE = new UTF32Encoding(false, true, true);
UTF32Encoding u32BE = new UTF32Encoding(true, true, true);
// Create byte arrays from the same string containing the following characters:
// Latin Small Letter Z (U+007A)
// Latin Small Letter A (U+0061)
// Combining Breve (U+0306)
// Latin Small Letter AE With Acute (U+01FD)
// Greek Small Letter Beta (U+03B2)
String str = "za\u0306\u01FD\u03B2";
// barrBE uses the big-endian byte order.
byte[] barrBE = new byte[u32BE.GetByteCount(str)];
u32BE.GetBytes(str, 0, str.Length, barrBE, 0);
// barrLE uses the little-endian byte order.
byte[] barrLE = new byte[u32LE.GetByteCount(str)];
u32LE.GetBytes(str, 0, str.Length, barrLE, 0);
// Decode the byte arrays.
Console.WriteLine("BE array with BE encoding:");
DisplayString(barrBE, u32BE);
Console.WriteLine();
Console.WriteLine("LE array with LE encoding:");
DisplayString(barrLE, u32LE);
Console.WriteLine();
// Decode the byte arrays using an encoding with a different byte order.
Console.WriteLine("BE array with LE encoding:");
try {
DisplayString(barrBE, u32LE);
}
catch (System.ArgumentException e) {
Console.WriteLine(e.Message);
}
Console.WriteLine();
Console.WriteLine("LE array with BE encoding:");
try {
DisplayString(barrLE, u32BE);
}
catch (ArgumentException e) {
Console.WriteLine(e.Message);
}
Console.WriteLine();
}
public static void DisplayString(byte[] bytes, Encoding enc)
{
// Display the name of the encoding used.
Console.Write("{0,-25}: ", enc.ToString());
// Decode the bytes and display the characters.
Console.WriteLine(enc.GetString(bytes, 0, bytes.Length));
}
}
// This example displays the following output:
// BE array with BE encoding:
// System.Text.UTF32Encoding: zăǽβ
//
// LE array with LE encoding:
// System.Text.UTF32Encoding: zăǽβ
//
// BE array with LE encoding:
// System.Text.UTF32Encoding: Unable to translate bytes [00][00][00][7A] at index 0 from specified code page to Unicode.
//
// LE array with BE encoding:
// System.Text.UTF32Encoding: Unable to translate bytes [7A][00][00][00] at index 0 from specified code page to Unicode.
Imports System.Text
Public Module Example
Public Sub Main()
' Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
Dim u32LE As New UTF32Encoding(False, True, True)
Dim u32BE As New UTF32Encoding(True, True, True)
' Create byte arrays from the same string containing the following characters:
' Latin Small Letter Z (U+007A)
' Latin Small Letter A (U+0061)
' Combining Breve (U+0306)
' Latin Small Letter AE With Acute (U+01FD)
' Greek Small Letter Beta (U+03B2)
Dim str As String = "za" + ChrW(&h0306) + ChrW(&h01FD) + ChrW(&h03B2)
' barrBE uses the big-endian byte order.
Dim barrBE(u32BE.GetByteCount(str) - 1) As Byte
u32BE.GetBytes(str, 0, str.Length, barrBE, 0)
' barrLE uses the little-endian byte order.
Dim barrLE(u32LE.GetByteCount(str) - 1) As Byte
u32LE.GetBytes(str, 0, str.Length, barrLE, 0)
' Decode the byte arrays.
Console.WriteLine("BE array with BE encoding:")
DisplayString(barrBE, u32BE)
Console.WriteLine()
Console.WriteLine("LE array with LE encoding:")
DisplayString(barrLE, u32LE)
Console.WriteLine()
' Decode the byte arrays using an encoding with a different byte order.
Console.WriteLine("BE array with LE encoding:")
Try
DisplayString(barrBE, u32LE)
Catch e As ArgumentException
Console.WriteLine(e.Message)
End Try
Console.WriteLine()
Console.WriteLine("LE array with BE encoding:")
Try
DisplayString(barrLE, u32BE)
Catch e As ArgumentException
Console.WriteLine(e.Message)
End Try
Console.WriteLine()
End Sub
Public Sub DisplayString(bytes As Byte(), enc As Encoding )
' Display the name of the encoding used.
Console.Write("{0,-25}: ", enc.ToString())
' Decode the bytes and display the characters.
Console.WriteLine(enc.GetString(bytes, 0, bytes.Length))
End Sub
End Module
' This example displays the following output:
' BE array with BE encoding:
' System.Text.UTF32Encoding: zăǽβ
'
' LE array with LE encoding:
' System.Text.UTF32Encoding: zăǽβ
'
' BE array with LE encoding:
' System.Text.UTF32Encoding: Unable to translate bytes [00][00][00][7A] at index 0 from specified code page to Unicode.
'
' LE array with BE encoding:
' System.Text.UTF32Encoding: Unable to translate bytes [7A][00][00][00] at index 0 from specified code page to Unicode.
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()
{
var utf32 = new UTF32Encoding(! BitConverter.IsLittleEndian, 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[utf32.GetByteCount(s) + utf32.GetPreamble().Length];
// Encode the string.
Array.Copy(utf32.GetPreamble(), bytes, utf32.GetPreamble().Length);
utf32.GetBytes(s, 0, s.Length, bytes, utf32.GetPreamble().Length);
// Decode the byte array.
String s2 = utf32.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 utf32 As New UTF32Encoding(Not BitConverter.IsLittleEndian, 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(utf32.GetByteCount(s) + utf32.GetPreamble().Length - 1) As Byte
' Encode the string.
Array.Copy(utf32.GetPreamble(), bytes, utf32.GetPreamble().Length)
utf32.GetBytes(s, 0, s.Length, bytes, utf32.GetPreamble().Length)
' Decode the byte array.
Dim s2 As String = utf32.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 32-bitowego znaku kolejności bajtów U+FFFE U+0000. 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 "?".
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 obsługującego inny niż BOM, znak U+FFFE jest uwzględniany w tablicy znaków zwróconej 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, aplikacja powinna używać Decoder wartości lub Encoder dostarczonej GetDecoder odpowiednio przez metodę lub GetEncoder metodę.