UTF32Encoding.GetString(Byte[], Int32, Int32) Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Bájttartományt kódol egy bájttömbből egy sztringbe.
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
Paraméterek
- bytes
- Byte[]
A dekódolni kívánt bájtok sorozatát tartalmazó bájttömb.
- index
- Int32
A dekódolni kívánt első bájt indexe.
- count
- Int32
A dekódolni kívánt bájtok száma.
Válaszok
Egy sztring, amely a megadott bájtsorozat dekódolásának eredményeit tartalmazza.
Kivételek
bytes az null.
index vagy count kisebb, mint nulla.
-vagy-
index és count ne jelölje az érvényes tartományt a következőben bytes: .
A hibaészlelés engedélyezve van, és bytes érvénytelen bájtsort tartalmaz.
Hiba történt (további információ:
-és-
DecoderFallback DecoderExceptionFallbackértékre van állítva.
Példák
Az alábbi példa egy sztringet két bájtból álló tömbbe kódol, az egyiket kis végű sorrendbe, a másikat pedig nagy végű sorrendbe. Ezután visszakódolja a bájtokat egy sztringbe.
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.
Az alábbi példa inicializál egy tömböt a GetByteCount metódus meghívásával annak meghatározásához, hogy pontosan hány bájt szükséges egy kódolt sztringhez, majd adja hozzá a bájtsorrendjel (BOM) méretét. A példa ezután meghívja a metódust a GetPreamble BOM tömbben való tárolására, mielőtt meghívja a GetBytes metódust a kódolt bájtok tömbbe való tárolására. A példa ezután meghívja a metódust a GetString sztring dekódolásához.
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...
Vegye figyelembe, hogy ebben az esetben a dekódolt sztring eltér az eredeti sztringtől, mivel az U+FFFE U+0000 32 bites bájtsorrendjellel kezdődik. Ez azt jelenti, hogy a két sztring egyenlőtlenként lesz összehasonlítva, és ha a sztring kimenet, akkor az anyagjegyzék a "?" helyettesítő karakterként jelenik meg.
Megjegyzések
Hibaészlelés esetén az érvénytelen sorrend miatt ez a metódus egy ArgumentException. Hibaészlelés nélkül a rendszer figyelmen kívül hagyja az érvénytelen sorozatokat, és nincs kivétel.
Ha a dekódolandó bájtok tartománya tartalmazza a bájtsorrendjelet (BOM), és a bájttömböt nem BOM-tudatos típusú metódussal adták vissza, akkor az U+FFFE karakter szerepel a metódus által visszaadott karaktertömbben. A metódus meghívásával eltávolíthatja.String.TrimStart
Az átalakítandó adatok, például a streamből beolvasott adatok csak szekvenciális blokkokban érhetők el. Ebben az esetben, vagy ha az adatok mennyisége olyan nagy, hogy kisebb blokkokra kell osztani, az alkalmazásnak a Decoder metódus vagy Encoder a GetDecoder metódus által GetEncoder megadott vagy megadott adatokat kell használnia.