UnicodeEncoding.GetEncoder Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee verkrijgt u een coderingsprogramma waarmee een reeks Unicode-tekens wordt geconverteerd naar een UTF-16 gecodeerde reeks bytes.
public:
override System::Text::Encoder ^ GetEncoder();
public override System.Text.Encoder GetEncoder();
[System.Runtime.InteropServices.ComVisible(false)]
public override System.Text.Encoder GetEncoder();
override this.GetEncoder : unit -> System.Text.Encoder
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.GetEncoder : unit -> System.Text.Encoder
Public Overrides Function GetEncoder () As Encoder
Retouren
Een Encoder object dat een reeks Unicode-tekens converteert naar een UTF-16 gecodeerde reeks bytes.
- Kenmerken
Voorbeelden
In het volgende voorbeeld worden een encoder en een decoder gebruikt om een tekenreeks te coderen in een matrix van bytes en de bytes vervolgens te decoderen in een matrix met tekens.
using System;
using System.Text;
public class SamplesUnicodeEncoding {
public static void Main() {
// Get an encoder and a decoder from UnicodeEncoding.
UnicodeEncoding u16 = new UnicodeEncoding( false, true, true );
Encoder myEnc = u16.GetEncoder();
Decoder myDec = u16.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 61 00 06 03 FD 01 B2 03
Using the decoder : za??ß
*/
Imports System.Text
Public Class SamplesUnicodeEncoding
Public Shared Sub Main()
' Get an encoder and a decoder from UnicodeEncoding.
Dim u16 As New UnicodeEncoding(False, True, True)
Dim myEnc As Encoder = u16.GetEncoder()
Dim myDec As Decoder = u16.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 61 00 06 03 FD 01 B2 03
'Using the decoder : za??ß
Opmerkingen
De Encoder.GetBytes methode converteert sequentiële tekensblokken naar sequentiële blokken van bytes op een manier die vergelijkbaar is met de GetBytes methode van deze klasse. Encoder Een object onderhoudt echter statusinformatie tussen aanroepen, zodat het tekenreeksen die blokken omvatten, correct kan coderen. Het Encoder object behoudt ook volgtekens aan het einde van gegevensblokken en gebruikt de volgtekens in de volgende coderingsbewerking. Een gegevensblok kan bijvoorbeeld eindigen met een niet-overeenkomend hoog surrogaat en de overeenkomende lage surrogaat kan zich in het volgende gegevensblok bevinden. GetDecoder Daarom en GetEncoder zijn nuttig voor netwerkoverdracht en bestandsbewerkingen, omdat deze bewerkingen vaak omgaan met blokken gegevens in plaats van een volledige gegevensstroom.
Als foutdetectie is ingeschakeld, is de throwOnInvalidBytes parameter van de constructor ingesteld op true, wordt foutdetectie ook ingeschakeld in het Encoder object dat door deze methode wordt geretourneerd. Als foutdetectie is ingeschakeld en er een ongeldige reeks wordt aangetroffen, is de status van de encoder niet gedefinieerd en moet de verwerking worden gestopt.