Encoding.GetChars Metódus

Definíció

Ha felülbírál egy származtatott osztályban, bájtok sorozatát kódolja karakterkészletté.

Túlterhelések

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

Ha egy származtatott osztályban felülbírál, a megadott bájttömbből a megadott karaktertömbbe dekódolja a bájtok sorozatát.

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

Ha egy származtatott osztályban felülbírál, a megadott bájtmutatótól kezdődő bájtsorozatot a megadott karaktermutatótól kezdődően tárolt karakterek készletére dekódolja.

GetChars(Byte[], Int32, Int32)

Ha egy származtatott osztályban felülbírál, a megadott bájttömbből származó bájtok sorozatát karakterkészletté dekódolja.

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

Ha egy származtatott osztályban felülbírál, a megadott írásvédett bájttartományban lévő összes bájtot karakterskávé alakítja.

GetChars(Byte[])

Származtatott osztályban felülbírálva a megadott bájttömb összes bájtját karakterkészletté alakítja.

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

Forrás:
Encoding.cs
Forrás:
Encoding.cs
Forrás:
Encoding.cs
Forrás:
Encoding.cs
Forrás:
Encoding.cs

Ha egy származtatott osztályban felülbírál, a megadott bájttömbből a megadott karaktertömbbe dekódolja a bájtok sorozatát.

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

Paraméterek

bytes
Byte[]

A dekódolni kívánt bájtok sorozatát tartalmazó bájttömb.

byteIndex
Int32

A dekódolni kívánt első bájt indexe.

byteCount
Int32

A dekódolni kívánt bájtok száma.

chars
Char[]

Az eredményként kapott karakterkészletet tartalmazó karaktertömb.

charIndex
Int32

Az index, amelynél elkezdi írni az eredményként kapott karakterkészletet.

Válaszok

A beírt charskarakterek tényleges száma.

Kivételek

bytes az null.

-vagy-

chars az null.

byteIndex vagy byteCountcharIndex kisebb, mint nulla.

-vagy-

byteIndex és byteCount ne jelölje az érvényes tartományt a következőben bytes: .

-vagy-

charIndex érvénytelen index a következőben chars: .

chars nem rendelkezik elegendő kapacitással a tömb végétől charIndex a kapott karakterek elhelyezéséhez.

Hiba történt (további információ: Acharacter kódolása a .NET)

-és-

DecoderFallback DecoderExceptionFallbackértékre van állítva.

Példák

Az alábbi példa egy sztringet konvertál egyik kódolásból a másikba.

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 (?)

Az alábbi példa bájttömbbe kódol egy sztringet, majd a bájtok tartományát karaktertömbbe dekódolja.

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

Megjegyzések

Az eredményként kapott karakterek tárolásához szükséges GetChars pontos tömbméret kiszámításához használja a metódust GetCharCount . A maximális tömbméret kiszámításához használja a metódust GetMaxCharCount . A GetCharCount metódus általában kevesebb memória lefoglalását teszi lehetővé, míg a GetMaxCharCount metódus általában gyorsabban fut.

GetChars(Byte[], Int32, Int32, Char[], Int32) beolvas karaktereket egy bemeneti bájtsorozatból. Encoding.GetChars eltér attól, hogy Decoder.GetCharsEncoding különálló konverziókat vár el, míg Decoder egyetlen bemeneti adatfolyamon több átvitelre van tervezve.

Ha az átalakítandó adatok csak szekvenciális blokkokban (például adatfolyamból beolvasott adatokban) érhetők el, vagy ha az adatmennyiség olyan nagy, hogy kisebb blokkokra kell osztani, akkor a Decoder metódus vagy a származtatott osztály Encoder metódusa által biztosított GetDecoder vagy GetEncoder kell használnia.

Note

Ez a módszer Unicode-karaktereken, nem tetszőleges bináris adatokon, például bájttömbökön való működésre szolgál. Ha tetszőleges bináris adatokat kell szöveggé kódolnia, akkor olyan protokollt kell használnia, mint az uuencode, amelyet olyan metódusok implementálnak, mint Convert.ToBase64CharArraya .

A GetCharCount metódus meghatározza, hogy hány karakter eredményez bájtsorozat dekódolását, és a GetChars metódus végrehajtja a tényleges dekódolást. A Encoding.GetChars metódus különálló konverziókat vár, szemben a Decoder.GetChars metódussal, amely egyetlen bemeneti adatfolyamon több átvitelt kezel.

A verziók több verziója GetCharCountGetChars is támogatott. Az alábbi programozási szempontokat érdemes figyelembe venni az alábbi módszerek használatához:

  • Előfordulhat, hogy az alkalmazásnak több bemeneti bájtot kell dekódolnia egy kódlapról, és több hívással kell feldolgoznia a bájtokat. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között, mivel a kötegek feldolgozása során a bájtsorozatok megszakíthatók. (Például egy ISO-2022-es műszaksorozat egy része lezárhat egy GetChars hívást, és a következő GetChars hívás elején folytathatja. Encoding.GetCharsDecoder

  • Ha az alkalmazás sztringkimeneteket kezel, a GetString metódus használata javasolt. Mivel ennek a metódusnak ellenőriznie kell a sztring hosszát és le kell foglalnia egy puffert, kissé lassabb, de az eredményül kapott String típust kell előnyben részesíteni.

  • A bájtos verzió GetChars(Byte*, Int32, Char*, Int32) lehetővé tesz néhány gyors technikát, különösen a nagy pufferek több hívásával. Ne feledje azonban, hogy ez a metódusverzió néha nem biztonságos, mivel mutatókra van szükség.

  • Ha az alkalmazásnak nagy mennyiségű adatot kell konvertálnia, akkor újra fel kell használnia a kimeneti puffert. Ebben az esetben a GetChars(Byte[], Int32, Int32, Char[], Int32) kimeneti karakterpuffereket támogató verzió a legjobb választás.

  • Fontolja meg a metódus használatát ahelyett Decoder.Convert , hogy GetCharCount. A konvertálási módszer a lehető legtöbb adatot konvertálja, és kivételt eredményez, ha a kimeneti puffer túl kicsi. A streamek folyamatos dekódolásához gyakran ez a módszer a legjobb választás.

Lásd még

A következőre érvényes:

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

Forrás:
Encoding.cs
Forrás:
Encoding.cs
Forrás:
Encoding.cs
Forrás:
Encoding.cs
Forrás:
Encoding.cs

Fontos

Ez az API nem CLS-kompatibilis.

Ha egy származtatott osztályban felülbírál, a megadott bájtmutatótól kezdődő bájtsorozatot a megadott karaktermutatótól kezdődően tárolt karakterek készletére dekódolja.

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)]
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)>]
[<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)>]
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

Paraméterek

bytes
Byte*

A dekódolni kívánt első bájtra mutató mutató.

byteCount
Int32

A dekódolni kívánt bájtok száma.

chars
Char*

Az eredményként kapott karakterkészlet írásának megkezdéséhez mutató mutató.

charCount
Int32

Az írandó karakterek maximális száma.

Válaszok

A paraméter által chars megjelölt helyen írt karakterek tényleges száma.

Attribútumok

Kivételek

bytes az null.

-vagy-

chars az null.

byteCount vagy charCount kisebb, mint nulla.

charCount kisebb, mint az eredményként kapott karakterek száma.

Hiba történt (további információ: Acharacter kódolása a .NET)

-és-

DecoderFallback DecoderExceptionFallbackértékre van állítva.

Megjegyzések

Az eredményként kapott karakterek tárolásához szükséges pontos tömbméret GetChars kiszámításához használja a metódust GetCharCount . A maximális tömbméret kiszámításához használja a metódust GetMaxCharCount . A GetCharCount metódus általában kevesebb memória lefoglalását teszi lehetővé, míg a GetMaxCharCount metódus általában gyorsabban fut.

Encoding.GetChars beolvas karaktereket egy bemeneti bájtsorozatból. Encoding.GetChars eltér attól, hogy Decoder.GetCharsEncoding különálló konverziókat vár el, míg Decoder egyetlen bemeneti adatfolyamon több átvitelre van tervezve.

Ha az átalakítandó adatok csak szekvenciális blokkokban (például adatfolyamból beolvasott adatokban) érhetők el, vagy ha az adatmennyiség olyan nagy, hogy kisebb blokkokra kell osztani, akkor egy származtatott osztály vagy metódus által biztosított objektumot vagy Decoder objektumot kell használnia EncoderGetDecoder.GetEncoder

Note

Ez a módszer Unicode-karaktereken, nem tetszőleges bináris adatokon, például bájttömbökön való működésre szolgál. Ha tetszőleges bináris adatokat kell szöveggé kódolnia, akkor olyan protokollt kell használnia, mint az uuencode, amelyet olyan metódusok implementálnak, mint Convert.ToBase64CharArraya .

A GetCharCount metódus meghatározza, hogy hány karakter eredményez bájtsorozat dekódolását, és a GetChars metódus végrehajtja a tényleges dekódolást. A Encoding.GetChars metódus különálló konverziókat vár, szemben a Decoder.GetChars metódussal, amely egyetlen bemeneti adatfolyamon több átvitelt kezel.

A verziók több verziója GetCharCountGetChars is támogatott. Az alábbi programozási szempontokat érdemes figyelembe venni az alábbi módszerek használatához:

  • Előfordulhat, hogy az alkalmazásnak több bemeneti bájtot kell dekódolnia egy kódlapról, és több hívással kell feldolgoznia a bájtokat. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között, mivel a kötegek feldolgozása során a bájtsorozatok megszakíthatók. (Például egy ISO-2022-es műszaksorozat egy része lezárhat egy GetChars hívást, és a következő GetChars hívás elején folytathatja. Encoding.GetCharsDecoder

  • Ha az alkalmazás sztringkimeneteket kezel, a GetString metódus használata javasolt. Mivel ennek a metódusnak ellenőriznie kell a sztring hosszát és le kell foglalnia egy puffert, kissé lassabb, de az eredményül kapott String típust kell előnyben részesíteni.

  • A bájtos verzió GetChars(Byte*, Int32, Char*, Int32) lehetővé tesz néhány gyors technikát, különösen a nagy pufferek több hívásával. Ne feledje azonban, hogy ez a metódusverzió néha nem biztonságos, mivel mutatókra van szükség.

  • Ha az alkalmazásnak nagy mennyiségű adatot kell konvertálnia, akkor újra fel kell használnia a kimeneti puffert. Ebben az esetben a GetChars(Byte[], Int32, Int32, Char[], Int32) kimeneti karakterpuffereket támogató verzió a legjobb választás.

  • Fontolja meg a metódus használatát ahelyett Decoder.Convert , hogy GetCharCount. A konvertálási módszer a lehető legtöbb adatot konvertálja, és kivételt eredményez, ha a kimeneti puffer túl kicsi. A streamek folyamatos dekódolásához gyakran ez a módszer a legjobb választás.

Lásd még

A következőre érvényes:

GetChars(Byte[], Int32, Int32)

Forrás:
Encoding.cs
Forrás:
Encoding.cs
Forrás:
Encoding.cs
Forrás:
Encoding.cs
Forrás:
Encoding.cs

Ha egy származtatott osztályban felülbírál, a megadott bájttömbből származó bájtok sorozatát karakterkészletté dekódolja.

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()

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

Char[]

Egy karaktertömb, 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: .

Hiba történt (további információ: Acharacter kódolása a .NET)

-és-

DecoderFallback DecoderExceptionFallbackértékre van állítva.

Példák

Az alábbi példa bájttömbbe kódol egy sztringet, majd a bájtok tartományát karaktertömbbe dekódolja.

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

Megjegyzések

Encoding.GetChars beolvas karaktereket egy bemeneti bájtsorozatból. Encoding.GetChars eltér attól, hogy Decoder.GetCharsEncoding különálló konverziókat vár el, míg Decoder egyetlen bemeneti adatfolyamon több átvitelre van tervezve.

Ha az átalakítandó adatok csak szekvenciális blokkokban (például adatfolyamból beolvasott adatokban) érhetők el, vagy ha az adatmennyiség olyan nagy, hogy kisebb blokkokra kell osztani, akkor a Decoder metódus vagy a származtatott osztály Encoder metódusa által biztosított GetDecoder vagy GetEncoder kell használnia.

Note

Ez a módszer Unicode-karaktereken, nem tetszőleges bináris adatokon, például bájttömbökön való működésre szolgál. Ha tetszőleges bináris adatokat kell szöveggé kódolnia, akkor olyan protokollt kell használnia, mint az uuencode, amelyet olyan metódusok implementálnak, mint Convert.ToBase64CharArraya .

A GetCharCount metódus meghatározza, hogy hány karakter eredményez bájtsorozat dekódolását, és a GetChars metódus végrehajtja a tényleges dekódolást. A Encoding.GetChars metódus különálló konverziókat vár, szemben a Decoder.GetChars metódussal, amely egyetlen bemeneti adatfolyamon több átvitelt kezel.

A verziók több verziója GetCharCountGetChars is támogatott. Az alábbi programozási szempontokat érdemes figyelembe venni az alábbi módszerek használatához:

  • Előfordulhat, hogy az alkalmazásnak több bemeneti bájtot kell dekódolnia egy kódlapról, és több hívással kell feldolgoznia a bájtokat. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között, mivel a kötegek feldolgozása során a bájtsorozatok megszakíthatók. (Például egy ISO-2022-es műszaksorozat egy része lezárhat egy GetChars hívást, és a következő GetChars hívás elején folytathatja. Encoding.GetCharsDecoder

  • Ha az alkalmazás sztringkimeneteket kezel, ajánlott a GetString metódust használni. Mivel ennek a metódusnak ellenőriznie kell a sztring hosszát és le kell foglalnia egy puffert, kissé lassabb, de az eredményül kapott String típust kell előnyben részesíteni.

  • A bájtos verzió GetChars(Byte*, Int32, Char*, Int32) lehetővé tesz néhány gyors technikát, különösen a nagy pufferek több hívásával. Ne feledje azonban, hogy ez a metódusverzió néha nem biztonságos, mivel mutatókra van szükség.

  • Ha az alkalmazásnak nagy mennyiségű adatot kell konvertálnia, akkor újra fel kell használnia a kimeneti puffert. Ebben az esetben a GetChars(Byte[], Int32, Int32, Char[], Int32) kimeneti karakterpuffereket támogató verzió a legjobb választás.

  • Fontolja meg a metódus használatát ahelyett Decoder.Convert , hogy GetCharCount. A konvertálási módszer a lehető legtöbb adatot konvertálja, és kivételt eredményez, ha a kimeneti puffer túl kicsi. A streamek folyamatos dekódolásához gyakran ez a módszer a legjobb választás.

Lásd még

A következőre érvényes:

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

Forrás:
Encoding.cs
Forrás:
Encoding.cs
Forrás:
Encoding.cs
Forrás:
Encoding.cs
Forrás:
Encoding.cs

Ha egy származtatott osztályban felülbírál, a megadott írásvédett bájttartományban lévő összes bájtot karakterskávé alakítja.

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

Paraméterek

bytes
ReadOnlySpan<Byte>

A dekódolni kívánt bájtok sorozatát tartalmazó írásvédett span.

chars
Span<Char>

A dekódolt bájtokat fogadó karakter.

Válaszok

A paraméter által chars megadott időtartamon belül írt karakterek tényleges száma.

Megjegyzések

Encoding.GetChars beolvas egy karaktert egy bemeneti bájttartományból. Encoding.GetChars eltér attól, hogy Decoder.GetCharsEncoding különálló konverziókat vár el, míg Decoder egyetlen bemeneti adatfolyamon több átvitelre van tervezve.

Ha az átalakítandó adatok csak szekvenciális blokkokban (például adatfolyamból beolvasott adatokban) érhetők el, vagy ha az adatmennyiség olyan nagy, hogy kisebb blokkokra kell osztani, akkor a Decoder metódus vagy a származtatott osztály Encoder metódusa által biztosított GetDecoder vagy GetEncoder kell használnia.

A GetCharCount metódus meghatározza, hogy hány karakter eredményez bájtsorozat dekódolását, és a GetChars metódus végrehajtja a tényleges dekódolást. A Encoding.GetChars metódus különálló konverziókat vár, szemben a Decoder.GetChars metódussal, amely egyetlen bemeneti adatfolyamon több átvitelt kezel.

A verziók több verziója GetCharCountGetChars is támogatott. Az alábbi programozási szempontokat érdemes figyelembe venni az alábbi módszerek használatához:

  • Előfordulhat, hogy az alkalmazásnak több bemeneti bájtot kell dekódolnia egy kódlapról, és több hívással kell feldolgoznia a bájtokat. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között, mivel a kötegek feldolgozása során a bájtsorozatok megszakíthatók. (Például egy ISO-2022-es műszaksorozat egy része lezárhat egy GetChars hívást, és a következő GetChars hívás elején folytathatja. Encoding.GetCharsDecoder

  • Ha az alkalmazás sztringkimeneteket kezel, ajánlott a GetString metódust használni. Mivel ennek a metódusnak ellenőriznie kell a sztring hosszát és le kell foglalnia egy puffert, kissé lassabb, de az eredményül kapott String típust kell előnyben részesíteni.

  • A bájtos verzió GetChars(Byte*, Int32, Char*, Int32) lehetővé tesz néhány gyors technikát, különösen a nagy pufferek több hívásával. Ne feledje azonban, hogy ez a metódusverzió néha nem biztonságos, mivel mutatókra van szükség.

  • Ha az alkalmazásnak nagy mennyiségű adatot kell konvertálnia, akkor újra fel kell használnia a kimeneti puffert. Ebben az esetben a GetChars(Byte[], Int32, Int32, Char[], Int32) kimeneti karakterpuffereket támogató verzió a legjobb választás.

  • Fontolja meg a metódus használatát ahelyett Decoder.Convert , hogy GetCharCount. A konvertálási módszer a lehető legtöbb adatot konvertálja, és kivételt eredményez, ha a kimeneti puffer túl kicsi. A streamek folyamatos dekódolásához gyakran ez a módszer a legjobb választás.

A következőre érvényes:

GetChars(Byte[])

Forrás:
Encoding.cs
Forrás:
Encoding.cs
Forrás:
Encoding.cs
Forrás:
Encoding.cs
Forrás:
Encoding.cs

Származtatott osztályban felülbírálva a megadott bájttömb összes bájtját karakterkészletté alakítja.

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()

Paraméterek

bytes
Byte[]

A dekódolni kívánt bájtok sorozatát tartalmazó bájttömb.

Válaszok

Char[]

Egy karaktertömb, amely a megadott bájtsorozat dekódolásának eredményeit tartalmazza.

Kivételek

bytes az null.

Hiba történt (további információ: Acharacter kódolása a .NET)

-és-

DecoderFallback DecoderExceptionFallbackértékre van állítva.

Példák

Az alábbi példa egy karakterláncot bájtok tömbjeként kódol, majd a bájtokat karaktertömbbe dekódolja.

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ăǽβ

Megjegyzések

Encoding.GetChars beolvas karaktereket egy bemeneti bájtsorozatból. Encoding.GetChars eltér attól, hogy Decoder.GetCharsEncoding különálló konverziókat vár el, míg Decoder egyetlen bemeneti adatfolyamon több átvitelre van tervezve.

Ha az átalakítandó adatok csak szekvenciális blokkokban (például adatfolyamból beolvasott adatokban) érhetők el, vagy ha az adatmennyiség olyan nagy, hogy kisebb blokkokra kell osztani, akkor a Decoder metódus vagy a származtatott osztály Encoder metódusa által biztosított GetDecoder vagy GetEncoder kell használnia.

Note

Ez a módszer Unicode-karaktereken, nem tetszőleges bináris adatokon, például bájttömbökön való működésre szolgál. Ha tetszőleges bináris adatokat kell szöveggé kódolnia, akkor olyan protokollt kell használnia, mint az uuencode, amelyet olyan metódusok implementálnak, mint Convert.ToBase64CharArraya .

A GetCharCount metódus meghatározza, hogy hány karakter eredményez bájtsorozat dekódolását, és a GetChars metódus végrehajtja a tényleges dekódolást. A Encoding.GetChars metódus különálló konverziókat vár, szemben a Decoder.GetChars metódussal, amely egyetlen bemeneti adatfolyamon több átvitelt kezel.

A verziók több verziója GetCharCountGetChars is támogatott. Az alábbi programozási szempontokat érdemes figyelembe venni az alábbi módszerek használatához:

  • Előfordulhat, hogy az alkalmazásnak több bemeneti bájtot kell dekódolnia egy kódlapról, és több hívással kell feldolgoznia a bájtokat. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között, mivel a kötegek feldolgozása során a bájtsorozatok megszakíthatók. (Például egy ISO-2022-es műszaksorozat egy része lezárhat egy GetChars hívást, és a következő GetChars hívás elején folytathatja. Encoding.GetCharsDecoder

  • Ha az alkalmazás sztringkimeneteket kezel, ajánlott a GetString metódust használni. Mivel ennek a metódusnak ellenőriznie kell a sztring hosszát és le kell foglalnia egy puffert, kissé lassabb, de az eredményül kapott String típust kell előnyben részesíteni.

  • A bájtos verzió GetChars(Byte*, Int32, Char*, Int32) lehetővé tesz néhány gyors technikát, különösen a nagy pufferek több hívásával. Ne feledje azonban, hogy ez a metódusverzió néha nem biztonságos, mivel mutatókra van szükség.

  • Ha az alkalmazásnak nagy mennyiségű adatot kell konvertálnia, akkor újra fel kell használnia a kimeneti puffert. Ebben az esetben a GetChars(Byte[], Int32, Int32, Char[], Int32) kimeneti karakterpuffereket támogató verzió a legjobb választás.

  • Fontolja meg a metódus használatát ahelyett Decoder.Convert , hogy GetCharCount. A konvertálási módszer a lehető legtöbb adatot konvertálja, és kivételt eredményez, ha a kimeneti puffer túl kicsi. A streamek folyamatos dekódolásához gyakran ez a módszer a legjobb választás.

Lásd még

A következőre érvényes: