UTF32Encoding.GetDecoder 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.
Uzyskuje dekoder, który konwertuje zakodowaną sekwencję bajtów UTF-32 na sekwencję znaków Unicode.
public:
override System::Text::Decoder ^ GetDecoder();
public override System.Text.Decoder GetDecoder ();
override this.GetDecoder : unit -> System.Text.Decoder
Public Overrides Function GetDecoder () As Decoder
Zwraca
Element Decoder , który konwertuje sekwencję bajtów zakodowaną na utF-32 w sekwencję znaków Unicode.
Przykłady
W poniższym przykładzie użyto kodera i dekodera, aby zakodować ciąg do tablicy bajtów, a następnie zdekodować bajty do tablicy znaków.
using namespace System;
using namespace System::Text;
int main()
{
// Get an encoder and a decoder from UTF32Encoding.
UTF32Encoding ^ u32 = gcnew UTF32Encoding( false,true,true );
Encoder^ myEnc = u32->GetEncoder();
Decoder^ myDec = u32->GetDecoder();
// The characters to encode:
// 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)
array<Char>^myChars = gcnew array<Char>(5){
L'z',L'a',L'\u0306',L'\u01FD',L'\u03B2'
};
Console::Write( "The original characters : " );
Console::WriteLine( myChars );
// Encode the character array.
int iBC = myEnc->GetByteCount( myChars, 0, myChars.Length, true );
array<Byte>^myBytes = gcnew array<Byte>(iBC);
myEnc->GetBytes( myChars, 0, myChars.Length, myBytes, 0, true );
// Print the resulting bytes.
Console::Write( "Using the encoder : " );
for ( int i = 0; i < myBytes.Length; i++ )
Console::Write( "{0:X2} ", myBytes[ i ] );
Console::WriteLine();
// Decode the byte array back into an array of characters.
int iCC = myDec->GetCharCount( myBytes, 0, myBytes.Length, true );
array<Char>^myDecodedChars = gcnew array<Char>(iCC);
myDec->GetChars( myBytes, 0, myBytes.Length, myDecodedChars, 0, true );
// Print the resulting characters.
Console::Write( "Using the decoder : " );
Console::WriteLine( myDecodedChars );
}
/*
This code produces the following output. The question marks take the place of characters that cannot be displayed at the console.
The original characters : za??
Using the encoder : 7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00
Using the decoder : za??
*/
using System;
using System.Text;
public class SamplesUTF32Encoding {
public static void Main() {
// Get an encoder and a decoder from UTF32Encoding.
UTF32Encoding u32 = new UTF32Encoding( false, true, true );
Encoder myEnc = u32.GetEncoder();
Decoder myDec = u32.GetDecoder();
// The characters to encode:
// 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)
char[] myChars = new char[5] { 'z', 'a', '\u0306', '\u01FD', '\u03B2' };
Console.Write( "The original characters : " );
Console.WriteLine( myChars );
// Encode the character array.
int iBC = myEnc.GetByteCount( myChars, 0, myChars.Length, true );
byte[] myBytes = new byte[iBC];
myEnc.GetBytes( myChars, 0, myChars.Length, myBytes, 0, true );
// Print the resulting bytes.
Console.Write( "Using the encoder : " );
for ( int i = 0; i < myBytes.Length; i++ )
Console.Write( "{0:X2} ", myBytes[i] );
Console.WriteLine();
// Decode the byte array back into an array of characters.
int iCC = myDec.GetCharCount( myBytes, 0, myBytes.Length, true );
char[] myDecodedChars = new char[iCC];
myDec.GetChars( myBytes, 0, myBytes.Length, myDecodedChars, 0, true );
// Print the resulting characters.
Console.Write( "Using the decoder : " );
Console.WriteLine( myDecodedChars );
}
}
/*
This code produces the following output. The question marks take the place of characters that cannot be displayed at the console.
The original characters : za??ß
Using the encoder : 7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00
Using the decoder : za??ß
*/
Imports System.Text
Public Class SamplesUTF32Encoding
Public Shared Sub Main()
' Get an encoder and a decoder from UTF32Encoding.
Dim u32 As New UTF32Encoding(False, True, True)
Dim myEnc As Encoder = u32.GetEncoder()
Dim myDec As Decoder = u32.GetDecoder()
' The characters to encode:
' 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 myChars() As Char = {"z"c, "a"c, ChrW(&H0306), ChrW(&H01FD), ChrW(&H03B2)}
Console.Write("The original characters : ")
Console.WriteLine(myChars)
' Encode the character array.
Dim iBC As Integer = myEnc.GetByteCount(myChars, 0, myChars.Length, True)
' NOTE: In Visual Basic, arrays contain one extra element by default.
' The following line creates an array with the exact number of elements required.
Dim myBytes(iBC - 1) As Byte
myEnc.GetBytes(myChars, 0, myChars.Length, myBytes, 0, True)
' Print the resulting bytes.
Console.Write("Using the encoder : ")
Dim i As Integer
For i = 0 To myBytes.Length - 1
Console.Write("{0:X2} ", myBytes(i))
Next i
Console.WriteLine()
' Decode the byte array back into an array of characters.
Dim iCC As Integer = myDec.GetCharCount(myBytes, 0, myBytes.Length, True)
' NOTE: In Visual Basic, arrays contain one extra element by default.
' The following line creates an array with the exact number of elements required.
Dim myDecodedChars(iCC - 1) As Char
myDec.GetChars(myBytes, 0, myBytes.Length, myDecodedChars, 0, True)
' Print the resulting characters.
Console.Write("Using the decoder : ")
Console.WriteLine(myDecodedChars)
End Sub
End Class
'This code produces the following output. The question marks take the place of characters that cannot be displayed at the console.
'
'The original characters : za??ß
'Using the encoder : 7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00
'Using the decoder : za??ß
Uwagi
Metoda Decoder.GetChars konwertuje sekwencyjne bloki bajtów na sekwencyjne bloki znaków w sposób podobny do GetChars metody . Jednak element Decoder zachowuje informacje o stanie między wywołaniami, dzięki czemu może poprawnie dekodować sekwencje bajtów obejmujące bloki. Obiekt Decoder zachowuje również końcowe bajty na końcu bloków danych i używa bajtów końcowych w następnej operacji dekodowania. GetDecoder W związku z tym i GetEncoder są przydatne w przypadku operacji transmisji i plików sieci, ponieważ te operacje często zajmują się blokami danych zamiast pełnego strumienia danych.
Jeśli wykrywanie błędów jest włączone, oznacza to, że throwOnInvalidCharacters parametr konstruktora został ustawiony na true, wykrywanie błędów jest również włączone w zwróconej Decoder przez tę metodę. Jeśli jest włączona funkcja wykrywania błędów i napotkana jest nieprawidłowa sekwencja, stan dekodera jest niezdefiniowany, a przetwarzanie musi zostać zatrzymane.