Encoding.GetChars Methode

Definitie

Wanneer deze wordt overschreven in een afgeleide klasse, wordt een reeks bytes gedecodeert in een reeks tekens.

Overloads

Name Description
GetChars(Byte[], Int32, Int32, Char[], Int32)

Wanneer deze wordt overschreven in een afgeleide klasse, ontsleutelt u een reeks bytes van de opgegeven bytematrix in de opgegeven tekenmatrix.

GetChars(Byte*, Int32, Char*, Int32)

Wanneer deze wordt overschreven in een afgeleide klasse, ontsleutelt u een reeks bytes die beginnen bij de opgegeven byteaanwijzer in een set tekens die zijn opgeslagen vanaf de opgegeven tekenaanwijzer.

GetChars(ReadOnlySpan<Byte>, Span<Char>)

Wanneer deze wordt overschreven in een afgeleide klasse, decodeert u alle bytes in de opgegeven bytespanne met het kenmerk Alleen-lezen in een tekenbereik.

GetChars(Byte[])

Wanneer deze wordt overschreven in een afgeleide klasse, ontsleutelt u alle bytes in de opgegeven bytematrix in een set tekens.

GetChars(Byte[], Int32, Int32)

Wanneer deze wordt overschreven in een afgeleide klasse, ontsleutelt u een reeks bytes van de opgegeven bytematrix in een reeks tekens.

GetChars(Byte[], Int32, Int32, Char[], Int32)

Wanneer deze wordt overschreven in een afgeleide klasse, ontsleutelt u een reeks bytes van de opgegeven bytematrix in de opgegeven tekenmatrix.

public:
 abstract int GetChars(cli::array <System::Byte> ^ bytes, int byteIndex, int byteCount, cli::array <char> ^ chars, int charIndex);
public abstract int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex);
abstract member GetChars : byte[] * int * int * char[] * int -> int
Public MustOverride Function GetChars (bytes As Byte(), byteIndex As Integer, byteCount As Integer, chars As Char(), charIndex As Integer) As Integer

Parameters

bytes
Byte[]

De bytematrix met de reeks bytes die moet worden gedecodeerd.

byteIndex
Int32

De index van de eerste byte om te decoderen.

byteCount
Int32

Het aantal bytes dat moet worden gedecodeerd.

chars
Char[]

De tekenmatrix die de resulterende set tekens bevat.

charIndex
Int32

De index waarop de resulterende set tekens moet worden geschreven.

Retouren

Het werkelijke aantal tekens dat is geschreven in chars.

Uitzonderingen

bytes is null.

– of –

chars is null.

byteIndex of byteCountcharIndex kleiner is dan nul.

– of –

byteIndex en byteCount geef geen geldig bereik aan in bytes.

– of –

charIndex is geen geldige index in chars.

chars heeft niet voldoende capaciteit van charIndex tot het einde van de matrix voor de resulterende tekens.

Er is een terugval opgetreden (zie Character Encoding in .NET)

en

DecoderFallback is ingesteld op DecoderExceptionFallback.

Voorbeelden

In het volgende voorbeeld wordt een tekenreeks geconverteerd van de ene codering naar de andere.

using System;
using System.Text;

class Example
{
   static void Main()
   {
      string unicodeString = "This string contains the unicode character Pi (\u03a0)";

      // Create two different encodings.
      Encoding ascii = Encoding.ASCII;
      Encoding unicode = Encoding.Unicode;

      // Convert the string into a byte array.
      byte[] unicodeBytes = unicode.GetBytes(unicodeString);

      // Perform the conversion from one encoding to the other.
      byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);
         
      // Convert the new byte[] into a char[] and then into a string.
      char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
      ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
      string asciiString = new string(asciiChars);

      // Display the strings created before and after the conversion.
      Console.WriteLine("Original string: {0}", unicodeString);
      Console.WriteLine("Ascii converted string: {0}", asciiString);
   }
}
// The example displays the following output:
//    Original string: This string contains the unicode character Pi (Π)
//    Ascii converted string: This string contains the unicode character Pi (?)
Imports System.Text

Class Example
   Shared Sub Main()
      Dim unicodeString As String = "This string contains the unicode character Pi (" & ChrW(&H03A0) & ")"

      ' Create two different encodings.
      Dim ascii As Encoding = Encoding.ASCII
      Dim unicode As Encoding = Encoding.Unicode

      ' Convert the string into a byte array.
      Dim unicodeBytes As Byte() = unicode.GetBytes(unicodeString)

      ' Perform the conversion from one encoding to the other.
      Dim asciiBytes As Byte() = Encoding.Convert(unicode, ascii, unicodeBytes)

      ' Convert the new byte array into a char array and then into a string.
      Dim asciiChars(ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)-1) As Char
      ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0)
      Dim asciiString As New String(asciiChars)

      ' Display the strings created before and after the conversion.
      Console.WriteLine("Original string: {0}", unicodeString)
      Console.WriteLine("Ascii converted string: {0}", asciiString)
   End Sub
End Class
' The example displays the following output:
'    Original string: This string contains the unicode character Pi (Π)
'    Ascii converted string: This string contains the unicode character Pi (?)

In het volgende voorbeeld wordt een tekenreeks gecodeerd in een matrix van bytes en wordt vervolgens een bereik van de bytes gedecodeerd in een matrix met tekens.

using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
      Encoding u32LE = Encoding.GetEncoding( "utf-32" );
      Encoding u32BE = Encoding.GetEncoding( "utf-32BE" );

      // Use a 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 myStr = "za\u0306\u01FD\u03B2";

      // Encode the string using the big-endian byte order.
      byte[] barrBE = new byte[u32BE.GetByteCount( myStr )];
      u32BE.GetBytes( myStr, 0, myStr.Length, barrBE, 0 );

      // Encode the string using the little-endian byte order.
      byte[] barrLE = new byte[u32LE.GetByteCount( myStr )];
      u32LE.GetBytes( myStr, 0, myStr.Length, barrLE, 0 );

      // Get the char counts, decode eight bytes starting at index 0,
      // and print out the counts and the resulting bytes.
      Console.Write( "BE array with BE encoding : " );
      PrintCountsAndChars( barrBE, 0, 8, u32BE );
      Console.Write( "LE array with LE encoding : " );
      PrintCountsAndChars( barrLE, 0, 8, u32LE );
   }

   public static void PrintCountsAndChars( byte[] bytes, int index, int count, Encoding enc )  {

      // Display the name of the encoding used.
      Console.Write( "{0,-25} :", enc.ToString() );

      // Display the exact character count.
      int iCC  = enc.GetCharCount( bytes, index, count );
      Console.Write( " {0,-3}", iCC );

      // Display the maximum character count.
      int iMCC = enc.GetMaxCharCount( count );
      Console.Write( " {0,-3} :", iMCC );

      // Decode the bytes and display the characters.
      char[] chars = enc.GetChars( bytes, index, count );

      // The following is an alternative way to decode the bytes:
      // char[] chars = new char[iCC];
      // enc.GetChars( bytes, index, count, chars, 0 );

      Console.WriteLine( chars );
   }
}


/* 
This code produces the following output.  The question marks take the place of characters that cannot be displayed at the console.

BE array with BE encoding : System.Text.UTF32Encoding : 2   6   :za
LE array with LE encoding : System.Text.UTF32Encoding : 2   6   :za

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub Main()

      ' Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
      Dim u32LE As Encoding = Encoding.GetEncoding("utf-32")
      Dim u32BE As Encoding = Encoding.GetEncoding("utf-32BE")

      ' Use a 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 myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2)

      ' Encode the string using the big-endian byte order.
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates barrBE with the exact number of elements required.
      Dim barrBE(u32BE.GetByteCount(myStr) - 1) As Byte
      u32BE.GetBytes(myStr, 0, myStr.Length, barrBE, 0)

      ' Encode the string using the little-endian byte order.
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates barrLE with the exact number of elements required.
      Dim barrLE(u32LE.GetByteCount(myStr) - 1) As Byte
      u32LE.GetBytes(myStr, 0, myStr.Length, barrLE, 0)

      ' Get the char counts, decode eight bytes starting at index 0,
      ' and print out the counts and the resulting bytes.
      Console.Write("BE array with BE encoding : ")
      PrintCountsAndChars(barrBE, 0, 8, u32BE)
      Console.Write("LE array with LE encoding : ")
      PrintCountsAndChars(barrLE, 0, 8, u32LE)

   End Sub


   Public Shared Sub PrintCountsAndChars(bytes() As Byte, index As Integer, count As Integer, enc As Encoding)

      ' Display the name of the encoding used.
      Console.Write("{0,-25} :", enc.ToString())

      ' Display the exact character count.
      Dim iCC As Integer = enc.GetCharCount(bytes, index, count)
      Console.Write(" {0,-3}", iCC)

      ' Display the maximum character count.
      Dim iMCC As Integer = enc.GetMaxCharCount(count)
      Console.Write(" {0,-3} :", iMCC)

      ' Decode the bytes.
      Dim chars As Char() = enc.GetChars(bytes, index, count)

      ' The following is an alternative way to decode the bytes:
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates the array with the exact number of elements required.
      ' Dim chars(iCC - 1) As Char
      ' enc.GetChars( bytes, index, count, chars, 0 )

      ' Display the characters.
      Console.WriteLine(chars)

   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.
'
'BE array with BE encoding : System.Text.UTF32Encoding : 2   6   :za
'LE array with LE encoding : System.Text.UTF32Encoding : 2   6   :za

Opmerkingen

Als u de exacte matrixgrootte wilt berekenen die is vereist voor GetChars het opslaan van de resulterende tekens, moet u de GetCharCount methode gebruiken. Als u de maximale matrixgrootte wilt berekenen, gebruikt u de GetMaxCharCount methode. Met de GetCharCount methode kan over het algemeen minder geheugen worden toegewezen, terwijl de GetMaxCharCount methode doorgaans sneller wordt uitgevoerd.

GetChars(Byte[], Int32, Int32, Char[], Int32) haalt tekens op uit een bytevolgorde voor invoer. Encoding.GetChars verschilt van Decoder.GetChars omdat Encoding er discrete conversies worden verwacht, terwijl Decoder deze is ontworpen voor meerdere passes op één invoerstroom.

Als de gegevens die moeten worden geconverteerd alleen beschikbaar zijn in opeenvolgende blokken (zoals gegevens die uit een stroom worden gelezen) of als de hoeveelheid gegevens zo groot is dat deze moet worden onderverdeeld in kleinere blokken, moet u de Decoder of de Encoder gebruiken die wordt geleverd door de GetDecoder methode of de GetEncoder methode, respectievelijk van een afgeleide klasse.

Note

Deze methode is bedoeld om te werken op Unicode-tekens, niet op willekeurige binaire gegevens, zoals bytematrices. Als u willekeurige binaire gegevens in tekst moet coderen, moet u een protocol zoals uuencode gebruiken, dat wordt geïmplementeerd door methoden zoals Convert.ToBase64CharArray.

De GetCharCount methode bepaalt hoeveel tekens resulteren in het decoderen van een reeks bytes en de GetChars methode voert de daadwerkelijke decodering uit. De Encoding.GetChars methode verwacht discrete conversies, in tegenstelling tot de Decoder.GetChars methode, die meerdere passeert op één invoerstroom.

Verschillende versies van GetCharCount en GetChars worden ondersteund. Hier volgen enkele programmeeroverwegingen voor het gebruik van deze methoden:

  • Uw app moet mogelijk meerdere invoerbytes decoderen vanaf een codepagina en de bytes verwerken met behulp van meerdere aanroepen. In dit geval moet u waarschijnlijk de status tussen aanroepen onderhouden, omdat bytereeksen kunnen worden onderbroken wanneer ze in batches worden verwerkt. (Een deel van een ISO-2022-dienstreeks kan bijvoorbeeld één GetChars oproep beëindigen en doorgaan aan het begin van de GetChars volgende aanroep. Encoding.GetChars De terugval wordt aangeroepen voor deze onvolledige reeksen, maar Decoder onthoudt deze reeksen voor de volgende aanroep.)

  • Als uw app tekenreeksuitvoer verwerkt, wordt de GetString methode aanbevolen. Omdat deze methode de tekenreekslengte moet controleren en een buffer moet toewijzen, is deze iets trager, maar het resulterende String type is de voorkeur.

  • De byteversie van GetChars(Byte*, Int32, Char*, Int32) maakt een aantal snelle technieken mogelijk, met name bij meerdere aanroepen naar grote buffers. Houd er echter rekening mee dat deze methodeversie soms onveilig is, omdat aanwijzers vereist zijn.

  • Als uw app een grote hoeveelheid gegevens moet converteren, moet deze de uitvoerbuffer opnieuw gebruiken. In dit geval is de GetChars(Byte[], Int32, Int32, Char[], Int32) versie die ondersteuning biedt voor uitvoertekenbuffers de beste keuze.

  • Overweeg om de Decoder.Convert methode te gebruiken in plaats van GetCharCount. De conversiemethode converteert zoveel mogelijk gegevens en genereert een uitzondering als de uitvoerbuffer te klein is. Voor continue decodering van een stroom is deze methode vaak de beste keuze.

Zie ook

Van toepassing op

GetChars(Byte*, Int32, Char*, Int32)

Belangrijk

Deze API is niet CLS-conform.

Wanneer deze wordt overschreven in een afgeleide klasse, ontsleutelt u een reeks bytes die beginnen bij de opgegeven byteaanwijzer in een set tekens die zijn opgeslagen vanaf de opgegeven tekenaanwijzer.

public:
 virtual int GetChars(System::Byte* bytes, int byteCount, char* chars, int charCount);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public virtual int GetChars(byte* bytes, int byteCount, char* chars, int charCount);
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetChars(byte* bytes, int byteCount, char* chars, int charCount);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetChars(byte* bytes, int byteCount, char* chars, int charCount);
[System.CLSCompliant(false)]
public virtual int GetChars(byte* bytes, int byteCount, char* chars, int charCount);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
abstract member GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
abstract member GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int
override this.GetChars : nativeptr<byte> * int * nativeptr<char> * int -> int

Parameters

bytes
Byte*

Een aanwijzer naar de eerste byte om te decoderen.

byteCount
Int32

Het aantal bytes dat moet worden gedecodeerd.

chars
Char*

Een aanwijzer naar de locatie waar de resulterende set tekens moet worden geschreven.

charCount
Int32

Het maximum aantal tekens dat moet worden geschreven.

Retouren

Het werkelijke aantal tekens dat is geschreven op de locatie die door de chars parameter wordt aangegeven.

Kenmerken

Uitzonderingen

bytes is null.

– of –

chars is null.

byteCount of charCount kleiner is dan nul.

charCount is kleiner dan het resulterende aantal tekens.

Er is een terugval opgetreden (zie Character Encoding in .NET)

en

DecoderFallback is ingesteld op DecoderExceptionFallback.

Opmerkingen

Als u de exacte matrixgrootte wilt berekenen die GetChars nodig is om de resulterende tekens op te slaan, moet u de GetCharCount methode gebruiken. Als u de maximale matrixgrootte wilt berekenen, gebruikt u de GetMaxCharCount methode. Met de GetCharCount methode kan over het algemeen minder geheugen worden toegewezen, terwijl de GetMaxCharCount methode doorgaans sneller wordt uitgevoerd.

Encoding.GetChars haalt tekens op uit een bytevolgorde voor invoer. Encoding.GetChars verschilt van Decoder.GetChars omdat Encoding er discrete conversies worden verwacht, terwijl Decoder deze is ontworpen voor meerdere passes op één invoerstroom.

Als de gegevens die moeten worden geconverteerd alleen beschikbaar zijn in opeenvolgende blokken (zoals gegevens die uit een stroom worden gelezen) of als de hoeveelheid gegevens zo groot is dat deze moet worden onderverdeeld in kleinere blokken, moet u het Decoder of het Encoder object gebruiken dat wordt geleverd door respectievelijk de GetDecoder methode of de GetEncoder methode van een afgeleide klasse.

Note

Deze methode is bedoeld om te werken op Unicode-tekens, niet op willekeurige binaire gegevens, zoals bytematrices. Als u willekeurige binaire gegevens in tekst moet coderen, moet u een protocol zoals uuencode gebruiken, dat wordt geïmplementeerd door methoden zoals Convert.ToBase64CharArray.

De GetCharCount methode bepaalt hoeveel tekens resulteren in het decoderen van een reeks bytes en de GetChars methode voert de daadwerkelijke decodering uit. De Encoding.GetChars methode verwacht discrete conversies, in tegenstelling tot de Decoder.GetChars methode, die meerdere passeert op één invoerstroom.

Verschillende versies van GetCharCount en GetChars worden ondersteund. Hier volgen enkele programmeeroverwegingen voor het gebruik van deze methoden:

  • Uw app moet mogelijk meerdere invoerbytes decoderen vanaf een codepagina en de bytes verwerken met behulp van meerdere aanroepen. In dit geval moet u waarschijnlijk de status tussen aanroepen onderhouden, omdat bytereeksen kunnen worden onderbroken wanneer ze in batches worden verwerkt. (Een deel van een ISO-2022-dienstreeks kan bijvoorbeeld één GetChars oproep beëindigen en doorgaan aan het begin van de GetChars volgende aanroep. Encoding.GetChars De terugval wordt aangeroepen voor deze onvolledige reeksen, maar Decoder onthoudt deze reeksen voor de volgende aanroep.)

  • Als uw app tekenreeksuitvoer verwerkt, wordt de GetString methode aanbevolen. Omdat deze methode de tekenreekslengte moet controleren en een buffer moet toewijzen, is deze iets trager, maar het resulterende String type is de voorkeur.

  • De byteversie van GetChars(Byte*, Int32, Char*, Int32) maakt een aantal snelle technieken mogelijk, met name bij meerdere aanroepen naar grote buffers. Houd er echter rekening mee dat deze methodeversie soms onveilig is, omdat aanwijzers vereist zijn.

  • Als uw app een grote hoeveelheid gegevens moet converteren, moet deze de uitvoerbuffer opnieuw gebruiken. In dit geval is de GetChars(Byte[], Int32, Int32, Char[], Int32) versie die ondersteuning biedt voor uitvoertekenbuffers de beste keuze.

  • Overweeg om de Decoder.Convert methode te gebruiken in plaats van GetCharCount. De conversiemethode converteert zoveel mogelijk gegevens en genereert een uitzondering als de uitvoerbuffer te klein is. Voor continue decodering van een stroom is deze methode vaak de beste keuze.

Zie ook

Van toepassing op

GetChars(ReadOnlySpan<Byte>, Span<Char>)

Wanneer deze wordt overschreven in een afgeleide klasse, decodeert u alle bytes in de opgegeven bytespanne met het kenmerk Alleen-lezen in een tekenbereik.

public:
 virtual int GetChars(ReadOnlySpan<System::Byte> bytes, Span<char> chars);
public virtual int GetChars(ReadOnlySpan<byte> bytes, Span<char> chars);
abstract member GetChars : ReadOnlySpan<byte> * Span<char> -> int
override this.GetChars : ReadOnlySpan<byte> * Span<char> -> int
Public Overridable Function GetChars (bytes As ReadOnlySpan(Of Byte), chars As Span(Of Char)) As Integer

Parameters

bytes
ReadOnlySpan<Byte>

Een alleen-lezenspanne met de reeks bytes die moeten worden gedecodeerd.

chars
Span<Char>

Het teken omvat het ontvangen van de gedecodeerde bytes.

Retouren

Het werkelijke aantal tekens dat is geschreven op het bereik dat wordt aangegeven door de chars parameter.

Opmerkingen

Encoding.GetChars haalt tekens op uit een invoer-bytespanne. Encoding.GetChars verschilt van Decoder.GetChars omdat Encoding er discrete conversies worden verwacht, terwijl Decoder deze is ontworpen voor meerdere passes op één invoerstroom.

Als de gegevens die moeten worden geconverteerd alleen beschikbaar zijn in opeenvolgende blokken (zoals gegevens die uit een stroom worden gelezen) of als de hoeveelheid gegevens zo groot is dat deze moet worden onderverdeeld in kleinere blokken, moet u de Decoder of de Encoder gebruiken die wordt geleverd door de GetDecoder methode of de GetEncoder methode, respectievelijk van een afgeleide klasse.

De GetCharCount methode bepaalt hoeveel tekens resulteren in het decoderen van een reeks bytes en de GetChars methode voert de daadwerkelijke decodering uit. De Encoding.GetChars methode verwacht discrete conversies, in tegenstelling tot de Decoder.GetChars methode, die meerdere passeert op één invoerstroom.

Verschillende versies van GetCharCount en GetChars worden ondersteund. Hier volgen enkele programmeeroverwegingen voor het gebruik van deze methoden:

  • Uw app moet mogelijk meerdere invoerbytes decoderen vanaf een codepagina en de bytes verwerken met behulp van meerdere aanroepen. In dit geval moet u waarschijnlijk de status tussen aanroepen onderhouden, omdat bytereeksen kunnen worden onderbroken wanneer ze in batches worden verwerkt. (Een deel van een ISO-2022-dienstreeks kan bijvoorbeeld één GetChars oproep beëindigen en doorgaan aan het begin van de GetChars volgende aanroep. Encoding.GetChars De terugval wordt aangeroepen voor deze onvolledige reeksen, maar Decoder onthoudt deze reeksen voor de volgende aanroep.)

  • Als uw app tekenreeksuitvoer verwerkt, is het raadzaam om de GetString methode te gebruiken. Omdat deze methode de tekenreekslengte moet controleren en een buffer moet toewijzen, is deze iets trager, maar het resulterende String type is de voorkeur.

  • De byteversie van GetChars(Byte*, Int32, Char*, Int32) maakt een aantal snelle technieken mogelijk, met name bij meerdere aanroepen naar grote buffers. Houd er echter rekening mee dat deze methodeversie soms onveilig is, omdat aanwijzers vereist zijn.

  • Als uw app een grote hoeveelheid gegevens moet converteren, moet deze de uitvoerbuffer opnieuw gebruiken. In dit geval is de GetChars(Byte[], Int32, Int32, Char[], Int32) versie die ondersteuning biedt voor uitvoertekenbuffers de beste keuze.

  • Overweeg om de Decoder.Convert methode te gebruiken in plaats van GetCharCount. De conversiemethode converteert zoveel mogelijk gegevens en genereert een uitzondering als de uitvoerbuffer te klein is. Voor continue decodering van een stroom is deze methode vaak de beste keuze.

Van toepassing op

GetChars(Byte[])

Wanneer deze wordt overschreven in een afgeleide klasse, ontsleutelt u alle bytes in de opgegeven bytematrix in een set tekens.

public:
 virtual cli::array <char> ^ GetChars(cli::array <System::Byte> ^ bytes);
public virtual char[] GetChars(byte[] bytes);
abstract member GetChars : byte[] -> char[]
override this.GetChars : byte[] -> char[]
Public Overridable Function GetChars (bytes As Byte()) As Char()

Parameters

bytes
Byte[]

De bytematrix met de reeks bytes die moet worden gedecodeerd.

Retouren

Char[]

Een tekenmatrix met de resultaten van het decoderen van de opgegeven reeks bytes.

Uitzonderingen

bytes is null.

Er is een terugval opgetreden (zie Character Encoding in .NET)

en

DecoderFallback is ingesteld op DecoderExceptionFallback.

Voorbeelden

In het volgende voorbeeld wordt een tekenreeks gecodeerd in een matrix van bytes en worden de bytes vervolgens gedecodeerd in een matrix met tekens.

using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
      Encoding u32LE = Encoding.GetEncoding( "utf-32" );
      Encoding u32BE = Encoding.GetEncoding( "utf-32BE" );

      // Use a 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 myStr = "za\u0306\u01FD\u03B2";

      // Encode the string using the big-endian byte order.
      byte[] barrBE = new byte[u32BE.GetByteCount( myStr )];
      u32BE.GetBytes( myStr, 0, myStr.Length, barrBE, 0 );

      // Encode the string using the little-endian byte order.
      byte[] barrLE = new byte[u32LE.GetByteCount( myStr )];
      u32LE.GetBytes( myStr, 0, myStr.Length, barrLE, 0 );

      // Get the char counts, and decode the byte arrays.
      Console.Write( "BE array with BE encoding : " );
      PrintCountsAndChars( barrBE, u32BE );
      Console.Write( "LE array with LE encoding : " );
      PrintCountsAndChars( barrLE, u32LE );
   }

   public static void PrintCountsAndChars( byte[] bytes, Encoding enc )  {

      // Display the name of the encoding used.
      Console.Write( "{0,-25} :", enc.ToString() );

      // Display the exact character count.
      int iCC  = enc.GetCharCount( bytes );
      Console.Write( " {0,-3}", iCC );

      // Display the maximum character count.
      int iMCC = enc.GetMaxCharCount( bytes.Length );
      Console.Write( " {0,-3} :", iMCC );

      // Decode the bytes and display the characters.
      char[] chars = enc.GetChars( bytes );
      Console.WriteLine( chars );
   }
}


/* 
This code produces the following output.  The question marks take the place of characters that cannot be displayed at the console.

BE array with BE encoding : System.Text.UTF32Encoding : 5   12  :zăǽβ
LE array with LE encoding : System.Text.UTF32Encoding : 5   12  :zăǽβ

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub Main()

      ' Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
      Dim u32LE As Encoding = Encoding.GetEncoding("utf-32")
      Dim u32BE As Encoding = Encoding.GetEncoding("utf-32BE")

      ' Use a 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 myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2) 

      ' Encode the string using the big-endian byte order.
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates the array with the exact number of elements required.
      Dim barrBE(u32BE.GetByteCount(myStr) - 1) As Byte
      u32BE.GetBytes(myStr, 0, myStr.Length, barrBE, 0)

      ' Encode the string using the little-endian byte order.
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates the array with the exact number of elements required.
      Dim barrLE(u32LE.GetByteCount(myStr) - 1) As Byte
      u32LE.GetBytes(myStr, 0, myStr.Length, barrLE, 0)

      ' Get the char counts, and decode the byte arrays.
      Console.Write("BE array with BE encoding : ")
      PrintCountsAndChars(barrBE, u32BE)
      Console.Write("LE array with LE encoding : ")
      PrintCountsAndChars(barrLE, u32LE)

   End Sub


   Public Shared Sub PrintCountsAndChars(bytes() As Byte, enc As Encoding)

      ' Display the name of the encoding used.
      Console.Write("{0,-25} :", enc.ToString())

      ' Display the exact character count.
      Dim iCC As Integer = enc.GetCharCount(bytes)
      Console.Write(" {0,-3}", iCC)

      ' Display the maximum character count.
      Dim iMCC As Integer = enc.GetMaxCharCount(bytes.Length)
      Console.Write(" {0,-3} :", iMCC)

      ' Decode the bytes and display the characters.
      Dim chars As Char() = enc.GetChars(bytes)
      Console.WriteLine(chars)

   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.
'
'BE array with BE encoding : System.Text.UTF32Encoding : 5   12  :zăǽβ
'LE array with LE encoding : System.Text.UTF32Encoding : 5   12  :zăǽβ

Opmerkingen

Encoding.GetChars haalt tekens op uit een bytevolgorde voor invoer. Encoding.GetChars verschilt van Decoder.GetChars omdat Encoding er discrete conversies worden verwacht, terwijl Decoder deze is ontworpen voor meerdere passes op één invoerstroom.

Als de gegevens die moeten worden geconverteerd alleen beschikbaar zijn in opeenvolgende blokken (zoals gegevens die uit een stroom worden gelezen) of als de hoeveelheid gegevens zo groot is dat deze moet worden onderverdeeld in kleinere blokken, moet u de Decoder of de Encoder gebruiken die wordt geleverd door de GetDecoder methode of de GetEncoder methode, respectievelijk van een afgeleide klasse.

Note

Deze methode is bedoeld om te werken op Unicode-tekens, niet op willekeurige binaire gegevens, zoals bytematrices. Als u willekeurige binaire gegevens in tekst moet coderen, moet u een protocol zoals uuencode gebruiken, dat wordt geïmplementeerd door methoden zoals Convert.ToBase64CharArray.

De GetCharCount methode bepaalt hoeveel tekens resulteren in het decoderen van een reeks bytes en de GetChars methode voert de daadwerkelijke decodering uit. De Encoding.GetChars methode verwacht discrete conversies, in tegenstelling tot de Decoder.GetChars methode, die meerdere passeert op één invoerstroom.

Verschillende versies van GetCharCount en GetChars worden ondersteund. Hier volgen enkele programmeeroverwegingen voor het gebruik van deze methoden:

  • Uw app moet mogelijk meerdere invoerbytes decoderen vanaf een codepagina en de bytes verwerken met behulp van meerdere aanroepen. In dit geval moet u waarschijnlijk de status tussen aanroepen onderhouden, omdat bytereeksen kunnen worden onderbroken wanneer ze in batches worden verwerkt. (Een deel van een ISO-2022-dienstreeks kan bijvoorbeeld één GetChars oproep beëindigen en doorgaan aan het begin van de GetChars volgende aanroep. Encoding.GetChars De terugval wordt aangeroepen voor deze onvolledige reeksen, maar Decoder onthoudt deze reeksen voor de volgende aanroep.)

  • Als uw app tekenreeksuitvoer verwerkt, is het raadzaam om de GetString methode te gebruiken. Omdat deze methode de tekenreekslengte moet controleren en een buffer moet toewijzen, is deze iets trager, maar het resulterende String type is de voorkeur.

  • De byteversie van GetChars(Byte*, Int32, Char*, Int32) maakt een aantal snelle technieken mogelijk, met name bij meerdere aanroepen naar grote buffers. Houd er echter rekening mee dat deze methodeversie soms onveilig is, omdat aanwijzers vereist zijn.

  • Als uw app een grote hoeveelheid gegevens moet converteren, moet deze de uitvoerbuffer opnieuw gebruiken. In dit geval is de GetChars(Byte[], Int32, Int32, Char[], Int32) versie die ondersteuning biedt voor uitvoertekenbuffers de beste keuze.

  • Overweeg om de Decoder.Convert methode te gebruiken in plaats van GetCharCount. De conversiemethode converteert zoveel mogelijk gegevens en genereert een uitzondering als de uitvoerbuffer te klein is. Voor continue decodering van een stroom is deze methode vaak de beste keuze.

Zie ook

Van toepassing op

GetChars(Byte[], Int32, Int32)

Wanneer deze wordt overschreven in een afgeleide klasse, ontsleutelt u een reeks bytes van de opgegeven bytematrix in een reeks tekens.

public:
 virtual cli::array <char> ^ GetChars(cli::array <System::Byte> ^ bytes, int index, int count);
public virtual char[] GetChars(byte[] bytes, int index, int count);
abstract member GetChars : byte[] * int * int -> char[]
override this.GetChars : byte[] * int * int -> char[]
Public Overridable Function GetChars (bytes As Byte(), index As Integer, count As Integer) As Char()

Parameters

bytes
Byte[]

De bytematrix met de reeks bytes die moet worden gedecodeerd.

index
Int32

De index van de eerste byte om te decoderen.

count
Int32

Het aantal bytes dat moet worden gedecodeerd.

Retouren

Char[]

Een tekenmatrix met de resultaten van het decoderen van de opgegeven reeks bytes.

Uitzonderingen

bytes is null.

index of count kleiner is dan nul.

– of –

index en count geef geen geldig bereik aan in bytes.

Er is een terugval opgetreden (zie Character Encoding in .NET)

en

DecoderFallback is ingesteld op DecoderExceptionFallback.

Voorbeelden

In het volgende voorbeeld wordt een tekenreeks gecodeerd in een matrix van bytes en wordt vervolgens een bereik van de bytes gedecodeerd in een matrix met tekens.

using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
      Encoding u32LE = Encoding.GetEncoding( "utf-32" );
      Encoding u32BE = Encoding.GetEncoding( "utf-32BE" );

      // Use a 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 myStr = "za\u0306\u01FD\u03B2";

      // Encode the string using the big-endian byte order.
      byte[] barrBE = new byte[u32BE.GetByteCount( myStr )];
      u32BE.GetBytes( myStr, 0, myStr.Length, barrBE, 0 );

      // Encode the string using the little-endian byte order.
      byte[] barrLE = new byte[u32LE.GetByteCount( myStr )];
      u32LE.GetBytes( myStr, 0, myStr.Length, barrLE, 0 );

      // Get the char counts, decode eight bytes starting at index 0,
      // and print out the counts and the resulting bytes.
      Console.Write( "BE array with BE encoding : " );
      PrintCountsAndChars( barrBE, 0, 8, u32BE );
      Console.Write( "LE array with LE encoding : " );
      PrintCountsAndChars( barrLE, 0, 8, u32LE );
   }

   public static void PrintCountsAndChars( byte[] bytes, int index, int count, Encoding enc )  {

      // Display the name of the encoding used.
      Console.Write( "{0,-25} :", enc.ToString() );

      // Display the exact character count.
      int iCC  = enc.GetCharCount( bytes, index, count );
      Console.Write( " {0,-3}", iCC );

      // Display the maximum character count.
      int iMCC = enc.GetMaxCharCount( count );
      Console.Write( " {0,-3} :", iMCC );

      // Decode the bytes and display the characters.
      char[] chars = enc.GetChars( bytes, index, count );

      // The following is an alternative way to decode the bytes:
      // char[] chars = new char[iCC];
      // enc.GetChars( bytes, index, count, chars, 0 );

      Console.WriteLine( chars );
   }
}


/* 
This code produces the following output.  The question marks take the place of characters that cannot be displayed at the console.

BE array with BE encoding : System.Text.UTF32Encoding : 2   6   :za
LE array with LE encoding : System.Text.UTF32Encoding : 2   6   :za

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub Main()

      ' Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
      Dim u32LE As Encoding = Encoding.GetEncoding("utf-32")
      Dim u32BE As Encoding = Encoding.GetEncoding("utf-32BE")

      ' Use a 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 myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2)

      ' Encode the string using the big-endian byte order.
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates barrBE with the exact number of elements required.
      Dim barrBE(u32BE.GetByteCount(myStr) - 1) As Byte
      u32BE.GetBytes(myStr, 0, myStr.Length, barrBE, 0)

      ' Encode the string using the little-endian byte order.
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates barrLE with the exact number of elements required.
      Dim barrLE(u32LE.GetByteCount(myStr) - 1) As Byte
      u32LE.GetBytes(myStr, 0, myStr.Length, barrLE, 0)

      ' Get the char counts, decode eight bytes starting at index 0,
      ' and print out the counts and the resulting bytes.
      Console.Write("BE array with BE encoding : ")
      PrintCountsAndChars(barrBE, 0, 8, u32BE)
      Console.Write("LE array with LE encoding : ")
      PrintCountsAndChars(barrLE, 0, 8, u32LE)

   End Sub


   Public Shared Sub PrintCountsAndChars(bytes() As Byte, index As Integer, count As Integer, enc As Encoding)

      ' Display the name of the encoding used.
      Console.Write("{0,-25} :", enc.ToString())

      ' Display the exact character count.
      Dim iCC As Integer = enc.GetCharCount(bytes, index, count)
      Console.Write(" {0,-3}", iCC)

      ' Display the maximum character count.
      Dim iMCC As Integer = enc.GetMaxCharCount(count)
      Console.Write(" {0,-3} :", iMCC)

      ' Decode the bytes.
      Dim chars As Char() = enc.GetChars(bytes, index, count)

      ' The following is an alternative way to decode the bytes:
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates the array with the exact number of elements required.
      ' Dim chars(iCC - 1) As Char
      ' enc.GetChars( bytes, index, count, chars, 0 )

      ' Display the characters.
      Console.WriteLine(chars)

   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.
'
'BE array with BE encoding : System.Text.UTF32Encoding : 2   6   :za
'LE array with LE encoding : System.Text.UTF32Encoding : 2   6   :za

Opmerkingen

Encoding.GetChars haalt tekens op uit een bytevolgorde voor invoer. Encoding.GetChars verschilt van Decoder.GetChars omdat Encoding er discrete conversies worden verwacht, terwijl Decoder deze is ontworpen voor meerdere passes op één invoerstroom.

Als de gegevens die moeten worden geconverteerd alleen beschikbaar zijn in opeenvolgende blokken (zoals gegevens die uit een stroom worden gelezen) of als de hoeveelheid gegevens zo groot is dat deze moet worden onderverdeeld in kleinere blokken, moet u de Decoder of de Encoder gebruiken die wordt geleverd door de GetDecoder methode of de GetEncoder methode, respectievelijk van een afgeleide klasse.

Note

Deze methode is bedoeld om te werken op Unicode-tekens, niet op willekeurige binaire gegevens, zoals bytematrices. Als u willekeurige binaire gegevens in tekst moet coderen, moet u een protocol zoals uuencode gebruiken, dat wordt geïmplementeerd door methoden zoals Convert.ToBase64CharArray.

De GetCharCount methode bepaalt hoeveel tekens resulteren in het decoderen van een reeks bytes en de GetChars methode voert de daadwerkelijke decodering uit. De Encoding.GetChars methode verwacht discrete conversies, in tegenstelling tot de Decoder.GetChars methode, die meerdere passeert op één invoerstroom.

Verschillende versies van GetCharCount en GetChars worden ondersteund. Hier volgen enkele programmeeroverwegingen voor het gebruik van deze methoden:

  • Uw app moet mogelijk meerdere invoerbytes decoderen vanaf een codepagina en de bytes verwerken met behulp van meerdere aanroepen. In dit geval moet u waarschijnlijk de status tussen aanroepen onderhouden, omdat bytereeksen kunnen worden onderbroken wanneer ze in batches worden verwerkt. (Een deel van een ISO-2022-dienstreeks kan bijvoorbeeld één GetChars oproep beëindigen en doorgaan aan het begin van de GetChars volgende aanroep. Encoding.GetChars De terugval wordt aangeroepen voor deze onvolledige reeksen, maar Decoder onthoudt deze reeksen voor de volgende aanroep.)

  • Als uw app tekenreeksuitvoer verwerkt, is het raadzaam om de GetString methode te gebruiken. Omdat deze methode de tekenreekslengte moet controleren en een buffer moet toewijzen, is deze iets trager, maar het resulterende String type is de voorkeur.

  • De byteversie van GetChars(Byte*, Int32, Char*, Int32) maakt een aantal snelle technieken mogelijk, met name bij meerdere aanroepen naar grote buffers. Houd er echter rekening mee dat deze methodeversie soms onveilig is, omdat aanwijzers vereist zijn.

  • Als uw app een grote hoeveelheid gegevens moet converteren, moet deze de uitvoerbuffer opnieuw gebruiken. In dit geval is de GetChars(Byte[], Int32, Int32, Char[], Int32) versie die ondersteuning biedt voor uitvoertekenbuffers de beste keuze.

  • Overweeg om de Decoder.Convert methode te gebruiken in plaats van GetCharCount. De conversiemethode converteert zoveel mogelijk gegevens en genereert een uitzondering als de uitvoerbuffer te klein is. Voor continue decodering van een stroom is deze methode vaak de beste keuze.

Zie ook

Van toepassing op