Udostępnij za pośrednictwem


UTF32Encoding.GetDecoder Metoda

Definicja

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

Decoder

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.

Dotyczy

Zobacz też