Encoding.GetBytes Metódus

Definíció

Ha felülbírált egy származtatott osztályban, egy karakterkészletet bájtok sorozatába kódol.

Túlterhelések

Name Description
GetBytes(Char[])

Ha felülbírált egy származtatott osztályban, a megadott karaktertömb összes karakterét bájtok sorozatába kódolja.

GetBytes(String)

Ha felülbírált egy származtatott osztályban, a megadott sztringben szereplő összes karaktert bájtok sorozatába kódolja.

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

Ha egy származtatott osztályban felülbírált, bájtok közötti tartományba kódolja a megadott írásvédett tartomány karakterkészletét.

GetBytes(Char[], Int32, Int32)

Ha egy származtatott osztályban felülbírált, a megadott karaktertömb karakterkészletét bájtok sorozatába kódolja.

GetBytes(String, Int32, Int32)

Ha egy származtatott osztályban felülbírált, bájtokból álló tömbbe kódolja a megadott sztringben megadott count karakterek számát a megadott indexkarakterláncból kiindulva.

GetBytes(Char*, Int32, Byte*, Int32)

Ha egy származtatott osztályban felülbírál, a megadott karaktermutatótól kezdődő karakterkészletet bájtok sorozatába kódolja, amelyek a megadott bájtmutatótól kezdve vannak tárolva.

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

Ha egy származtatott osztályban felül van bírálva, a megadott karaktertömbből a megadott bájttömbbe kódol egy karakterkészletet.

GetBytes(String, Int32, Int32, Byte[], Int32)

Származtatott osztály felülírásakor a megadott karakterlánc karakterkészletét kódolja a megadott bájttömbbe.

GetBytes(Char[])

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

Ha felülbírált egy származtatott osztályban, a megadott karaktertömb összes karakterét bájtok sorozatába kódolja.

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

Paraméterek

chars
Char[]

A kódolni kívánt karaktereket tartalmazó karaktertömb.

Válaszok

Byte[]

Egy bájttömb, amely a megadott karakterkészlet kódolásának eredményeit tartalmazza.

Kivételek

chars az null.

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

-és-

EncoderFallback EncoderExceptionFallbackértékre van állítva.

Példák

Az alábbi példa egy karaktertömb kódolásához, a karakterek kódolásához és az eredményként kapott bájtok megjelenítéséhez szükséges bájtok számát határozza meg.

using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // 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)
      //    a high-surrogate value (U+D8FF)
      //    a low-surrogate value (U+DCFF)
      char[] myChars = new char[] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };

      // Get different encodings.
      Encoding  u7    = Encoding.UTF7;
      Encoding  u8    = Encoding.UTF8;
      Encoding  u16LE = Encoding.Unicode;
      Encoding  u16BE = Encoding.BigEndianUnicode;
      Encoding  u32   = Encoding.UTF32;

      // Encode the entire array, and print out the counts and the resulting bytes.
      PrintCountsAndBytes( myChars, u7 );
      PrintCountsAndBytes( myChars, u8 );
      PrintCountsAndBytes( myChars, u16LE );
      PrintCountsAndBytes( myChars, u16BE );
      PrintCountsAndBytes( myChars, u32 );
   }

   public static void PrintCountsAndBytes( char[] chars, Encoding enc )  {

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

      // Display the exact byte count.
      int iBC  = enc.GetByteCount( chars );
      Console.Write( " {0,-3}", iBC );

      // Display the maximum byte count.
      int iMBC = enc.GetMaxByteCount( chars.Length );
      Console.Write( " {0,-3} :", iMBC );

      // Encode the array of chars.
      byte[] bytes = enc.GetBytes( chars );

      // Display all the encoded bytes.
      PrintHexBytes( bytes );
   }

   public static void PrintHexBytes( byte[] bytes )  {

      if (( bytes == null ) || ( bytes.Length == 0 ))
        {
            Console.WriteLine( "<none>" );
        }
        else  {
         for ( int i = 0; i < bytes.Length; i++ )
            Console.Write( "{0:X2} ", bytes[i] );
         Console.WriteLine();
      }
   }
}


/* 
This code produces the following output.

System.Text.UTF7Encoding       : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding       : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 14  16  :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 14  16  :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 24  32  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub Main()

      ' 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)
      '    a high-surrogate value (U+D8FF)
      '    a low-surrogate value (U+DCFF)
      Dim myChars() As Char = {"z"c, "a"c, ChrW(&H0306), ChrW(&H01FD), ChrW(&H03B2), ChrW(&HD8FF), ChrW(&HDCFF)}
 

      ' Get different encodings.
      Dim u7 As Encoding = Encoding.UTF7
      Dim u8 As Encoding = Encoding.UTF8
      Dim u16LE As Encoding = Encoding.Unicode
      Dim u16BE As Encoding = Encoding.BigEndianUnicode
      Dim u32 As Encoding = Encoding.UTF32

      ' Encode the entire array, and print out the counts and the resulting bytes.
      PrintCountsAndBytes(myChars, u7)
      PrintCountsAndBytes(myChars, u8)
      PrintCountsAndBytes(myChars, u16LE)
      PrintCountsAndBytes(myChars, u16BE)
      PrintCountsAndBytes(myChars, u32)

   End Sub


   Public Shared Sub PrintCountsAndBytes(chars() As Char, enc As Encoding)

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

      ' Display the exact byte count.
      Dim iBC As Integer = enc.GetByteCount(chars)
      Console.Write(" {0,-3}", iBC)

      ' Display the maximum byte count.
      Dim iMBC As Integer = enc.GetMaxByteCount(chars.Length)
      Console.Write(" {0,-3} :", iMBC)

      ' Encode the array of chars.
      Dim bytes As Byte() = enc.GetBytes(chars)

      ' Display all the encoded bytes.
      PrintHexBytes(bytes)

   End Sub


   Public Shared Sub PrintHexBytes(bytes() As Byte)

      If bytes Is Nothing OrElse bytes.Length = 0 Then
         Console.WriteLine("<none>")
      Else
         Dim i As Integer
         For i = 0 To bytes.Length - 1
            Console.Write("{0:X2} ", bytes(i))
         Next i
         Console.WriteLine()
      End If

   End Sub

End Class


'This code produces the following output.
'
'System.Text.UTF7Encoding       : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
'System.Text.UTF8Encoding       : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding    : 14  16  :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding    : 14  16  :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
'System.Text.UTF32Encoding      : 24  32  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00

Megjegyzések

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 GetByteCount metódus meghatározza, hogy hány bájtot eredményez egy Unicode-karakterkészlet kódolása, és a GetBytes metódus végrehajtja a tényleges kódolást. A GetBytes metódus különálló konverziókat vár, szemben a Encoder.GetBytes metódussal, amely több konverziót kezel egyetlen bemeneti adatfolyamon.

A verziók több verziója GetByteCountGetBytes 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 számos bemeneti karaktert kódolnia kell egy kódlapra, és több hívással kell feldolgoznia a karaktereket. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között, figyelembe véve a használt objektum által Encoder fenntartott állapotot. (Egy helyettesítő párokat tartalmazó karaktersorozat például magas helyettesítő karaktersorozattal végződhet. A Encoder emlékezni fog, hogy a magas helyettes, hogy lehet kombinálni egy alacsony helyettes elején a következő hívás. Encoding nem lesz képes fenntartani az állapotot, így a karakter lesz küldve a EncoderFallback.)

  • Ha az alkalmazás sztringbemeneteket kezel, hívja meg a metódus sztringverzióját GetBytes .

  • A Unicode karakterpuffer verziója GetBytes(Char*, Int32, Byte*, Int32) gyors technikákat tesz lehetővé, különösen az objektumot használó vagy a meglévő pufferekbe történő több hívás esetén Encoder . 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 GetBytes bájttömböket támogató verzió a legjobb választás.

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

Lásd még

A következőre érvényes:

GetBytes(String)

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

Ha felülbírált egy származtatott osztályban, a megadott sztringben szereplő összes karaktert bájtok sorozatába kódolja.

public:
 virtual cli::array <System::Byte> ^ GetBytes(System::String ^ s);
public virtual byte[] GetBytes(string s);
abstract member GetBytes : string -> byte[]
override this.GetBytes : string -> byte[]
Public Overridable Function GetBytes (s As String) As Byte()

Paraméterek

s
String

A kódolni kívánt karaktereket tartalmazó sztring.

Válaszok

Byte[]

Egy bájttömb, amely a megadott karakterkészlet kódolásának eredményeit tartalmazza.

Kivételek

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

-és-

EncoderFallback EncoderExceptionFallbackértékre van állítva.

Példák

Az alábbi példa meghatározza a sztring vagy tartomány kódolásához szükséges bájtok számát, kódolja a karaktereket, és megjeleníti az eredményül kapott bájtokat.

using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // 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)
      //    a high-surrogate value (U+D8FF)
      //    a low-surrogate value (U+DCFF)
      String myStr = "za\u0306\u01FD\u03B2\uD8FF\uDCFF";

      // Get different encodings.
      Encoding  u7    = Encoding.UTF7;
      Encoding  u8    = Encoding.UTF8;
      Encoding  u16LE = Encoding.Unicode;
      Encoding  u16BE = Encoding.BigEndianUnicode;
      Encoding  u32   = Encoding.UTF32;

      // Encode the entire string, and print out the counts and the resulting bytes.
      Console.WriteLine( "Encoding the entire string:" );
      PrintCountsAndBytes( myStr, u7 );
      PrintCountsAndBytes( myStr, u8 );
      PrintCountsAndBytes( myStr, u16LE );
      PrintCountsAndBytes( myStr, u16BE );
      PrintCountsAndBytes( myStr, u32 );

      Console.WriteLine();

      // Encode three characters starting at index 4, and print out the counts and the resulting bytes.
      Console.WriteLine( "Encoding the characters from index 4 through 6:" );
      PrintCountsAndBytes( myStr, 4, 3, u7 );
      PrintCountsAndBytes( myStr, 4, 3, u8 );
      PrintCountsAndBytes( myStr, 4, 3, u16LE );
      PrintCountsAndBytes( myStr, 4, 3, u16BE );
      PrintCountsAndBytes( myStr, 4, 3, u32 );
   }

   public static void PrintCountsAndBytes( String s, Encoding enc )  {

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

      // Display the exact byte count.
      int iBC  = enc.GetByteCount( s );
      Console.Write( " {0,-3}", iBC );

      // Display the maximum byte count.
      int iMBC = enc.GetMaxByteCount( s.Length );
      Console.Write( " {0,-3} :", iMBC );

      // Encode the entire string.
      byte[] bytes = enc.GetBytes( s );

      // Display all the encoded bytes.
      PrintHexBytes( bytes );
   }

   public static void PrintCountsAndBytes( String s, int index, int count, Encoding enc )  {

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

      // Display the exact byte count.
      int iBC  = enc.GetByteCount( s.ToCharArray(), index, count );
      Console.Write( " {0,-3}", iBC );

      // Display the maximum byte count.
      int iMBC = enc.GetMaxByteCount( count );
      Console.Write( " {0,-3} :", iMBC );

      // Encode a range of characters in the string.
      byte[] bytes = new byte[iBC];
      enc.GetBytes( s, index, count, bytes, bytes.GetLowerBound(0) );

      // Display all the encoded bytes.
      PrintHexBytes( bytes );
   }

   public static void PrintHexBytes( byte[] bytes )  {

      if (( bytes == null ) || ( bytes.Length == 0 ))
        {
            Console.WriteLine( "<none>" );
        }
        else  {
         for ( int i = 0; i < bytes.Length; i++ )
            Console.Write( "{0:X2} ", bytes[i] );
         Console.WriteLine();
      }
   }
}


/* 
This code produces the following output.

Encoding the entire string:
System.Text.UTF7Encoding       : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding       : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 14  16  :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 14  16  :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 24  32  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00

Encoding the characters from index 4 through 6:
System.Text.UTF7Encoding       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 8   16  :B2 03 00 00 FF FC 04 00

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub Main()

      ' 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)
      '    a high-surrogate value (U+D8FF)
      '    a low-surrogate value (U+DCFF)
      Dim myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2) & ChrW(&HD8FF) & ChrW(&HDCFF)

      ' Get different encodings.
      Dim u7 As Encoding = Encoding.UTF7
      Dim u8 As Encoding = Encoding.UTF8
      Dim u16LE As Encoding = Encoding.Unicode
      Dim u16BE As Encoding = Encoding.BigEndianUnicode
      Dim u32 As Encoding = Encoding.UTF32

      ' Encode the entire string, and print out the counts and the resulting bytes.
      Console.WriteLine("Encoding the entire string:")
      PrintCountsAndBytes(myStr, u7)
      PrintCountsAndBytes(myStr, u8)
      PrintCountsAndBytes(myStr, u16LE)
      PrintCountsAndBytes(myStr, u16BE)
      PrintCountsAndBytes(myStr, u32)

      Console.WriteLine()

      ' Encode three characters starting at index 4, and print out the counts and the resulting bytes.
      Console.WriteLine("Encoding the characters from index 4 through 6:")
      PrintCountsAndBytes(myStr, 4, 3, u7)
      PrintCountsAndBytes(myStr, 4, 3, u8)
      PrintCountsAndBytes(myStr, 4, 3, u16LE)
      PrintCountsAndBytes(myStr, 4, 3, u16BE)
      PrintCountsAndBytes(myStr, 4, 3, u32)

   End Sub


   Overloads Public Shared Sub PrintCountsAndBytes(s As String, enc As Encoding)

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

      ' Display the exact byte count.
      Dim iBC As Integer = enc.GetByteCount(s)
      Console.Write(" {0,-3}", iBC)

      ' Display the maximum byte count.
      Dim iMBC As Integer = enc.GetMaxByteCount(s.Length)
      Console.Write(" {0,-3} :", iMBC)

      ' Encode the entire string.
      Dim bytes As Byte() = enc.GetBytes(s)

      ' Display all the encoded bytes.
      PrintHexBytes(bytes)

   End Sub


   Overloads Public Shared Sub PrintCountsAndBytes(s As String, index As Integer, count As Integer, enc As Encoding)

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

      ' Display the exact byte count.
      Dim iBC As Integer = enc.GetByteCount(s.ToCharArray(), index, count)
      Console.Write(" {0,-3}", iBC)

      ' Display the maximum byte count.
      Dim iMBC As Integer = enc.GetMaxByteCount(count)
      Console.Write(" {0,-3} :", iMBC)

      ' Encode a range of characters in the string.
      ' 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 bytes(iBC - 1) As Byte
      enc.GetBytes(s, index, count, bytes, bytes.GetLowerBound(0))

      ' Display all the encoded bytes.
      PrintHexBytes(bytes)

   End Sub


   Public Shared Sub PrintHexBytes(bytes() As Byte)

      If bytes Is Nothing OrElse bytes.Length = 0 Then
         Console.WriteLine("<none>")
      Else
         Dim i As Integer
         For i = 0 To bytes.Length - 1
            Console.Write("{0:X2} ", bytes(i))
         Next i
         Console.WriteLine()
      End If

   End Sub

End Class


'This code produces the following output.
'
'Encoding the entire string:
'System.Text.UTF7Encoding       : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
'System.Text.UTF8Encoding       : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding    : 14  16  :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding    : 14  16  :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
'System.Text.UTF32Encoding      : 24  32  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
'
'Encoding the characters from index 4 through 6:
'System.Text.UTF7Encoding       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding      : 8   16  :B2 03 00 00 FF FC 04 00

Megjegyzések

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 GetByteCount metódus meghatározza, hogy hány bájtot eredményez egy Unicode-karakterkészlet kódolása, és a GetBytes metódus végrehajtja a tényleges kódolást. A Encoding.GetBytes metódus különálló konverziókat vár, szemben a Encoder.GetBytes metódussal, amely több konverziót kezel egyetlen bemeneti adatfolyamon.

A verziók több verziója GetByteCountGetBytes 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 számos bemeneti karaktert kódolnia kell egy kódlapra, és több hívással kell feldolgoznia a karaktereket. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között, figyelembe véve a használt objektum által Encoder fenntartott állapotot. (Egy helyettesítő párokat tartalmazó karaktersorozat például magas helyettesítő karaktersorozattal végződhet. A Encoder emlékezni fog, hogy a magas helyettes, hogy lehet kombinálni egy alacsony helyettes elején a következő hívás. Encoding nem lesz képes fenntartani az állapotot, így a karakter lesz küldve a EncoderFallback.)

  • Ha az alkalmazás sztringbemeneteket kezel, a sztringverziót kell használnia GetBytes.

  • A Unicode karakterpuffer verziója GetBytes(Char*, Int32, Byte*, Int32) gyors technikákat tesz lehetővé, különösen az objektumot használó vagy a meglévő pufferekbe történő több hívás esetén Encoder . 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 GetBytes bájttömböket támogató verzió a legjobb választás.

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

Lásd még

A következőre érvényes:

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

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ált, bájtok közötti tartományba kódolja a megadott írásvédett tartomány karakterkészletét.

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

Paraméterek

chars
ReadOnlySpan<Char>

A kódolandó karakterkészletet tartalmazó span.

bytes
Span<Byte>

A bájttartomány a kódolt bájtok tárolására.

Válaszok

A kódolt bájtok száma.

Megjegyzések

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 GetByteCount metódus meghatározza, hogy hány bájtot eredményez egy Unicode-karakterkészlet kódolása, és a GetBytes metódus végrehajtja a tényleges kódolást. A Encoding.GetBytes metódus különálló konverziókat vár, szemben a Encoder.GetBytes metódussal, amely több konverziót kezel egyetlen bemeneti adatfolyamon.

A verziók több verziója GetByteCountGetBytes 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 számos bemeneti karaktert kódolnia kell egy kódlapra, és több hívással kell feldolgoznia a karaktereket. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között, figyelembe véve a használt objektum által Encoder fenntartott állapotot. (Egy helyettesítő párokat tartalmazó karaktersorozat például magas helyettesítő karaktersorozattal végződhet. A Encoder emlékezni fog, hogy a magas helyettes, hogy lehet kombinálni egy alacsony helyettes elején a következő hívás. Encoding nem lesz képes fenntartani az állapotot, így a karakter lesz küldve a EncoderFallback.)

  • Ha az alkalmazás sztringbemeneteket kezel, a sztringverziót kell használnia GetBytes.

  • Ha az alkalmazásnak nagy mennyiségű adatot kell konvertálnia, akkor újra fel kell használnia a kimeneti puffert. Ebben az esetben a GetBytes bájttömböket támogató verzió a legjobb választás.

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

A következőre érvényes:

GetBytes(Char[], 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ált, a megadott karaktertömb karakterkészletét bájtok sorozatába kódolja.

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

Paraméterek

chars
Char[]

A kódolandó karaktereket tartalmazó karaktertömb.

index
Int32

Az első kódolandó karakter indexe.

count
Int32

A kódolandó karakterek száma.

Válaszok

Byte[]

Egy bájttömb, amely a megadott karakterkészlet kódolásának eredményeit tartalmazza.

Kivételek

chars az null.

index vagy count kisebb, mint nulla.

-vagy-

index és count ne jelölje az érvényes tartományt a következőben chars: .

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

-és-

EncoderFallback EncoderExceptionFallbackértékre van állítva.

Példák

Az alábbi példa meghatározza a karaktertömb három karakterének kódolásához, a karakterek kódolásához és az eredményként kapott bájtok megjelenítéséhez szükséges bájtok számát.

using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // 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)
      //    a high-surrogate value (U+D8FF)
      //    a low-surrogate value (U+DCFF)
      char[] myChars = new char[] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };

      // Get different encodings.
      Encoding  u7    = Encoding.UTF7;
      Encoding  u8    = Encoding.UTF8;
      Encoding  u16LE = Encoding.Unicode;
      Encoding  u16BE = Encoding.BigEndianUnicode;
      Encoding  u32   = Encoding.UTF32;

      // Encode three characters starting at index 4, and print out the counts and the resulting bytes.
      PrintCountsAndBytes( myChars, 4, 3, u7 );
      PrintCountsAndBytes( myChars, 4, 3, u8 );
      PrintCountsAndBytes( myChars, 4, 3, u16LE );
      PrintCountsAndBytes( myChars, 4, 3, u16BE );
      PrintCountsAndBytes( myChars, 4, 3, u32 );
   }

   public static void PrintCountsAndBytes( char[] chars, int index, int count, Encoding enc )  {

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

      // Display the exact byte count.
      int iBC  = enc.GetByteCount( chars, index, count );
      Console.Write( " {0,-3}", iBC );

      // Display the maximum byte count.
      int iMBC = enc.GetMaxByteCount( count );
      Console.Write( " {0,-3} :", iMBC );

      // Encode the array of chars.
      byte[] bytes = enc.GetBytes( chars, index, count );

      // The following is an alternative way to encode the array of chars:
      // byte[] bytes = new byte[iBC];
      // enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) );

      // Display all the encoded bytes.
      PrintHexBytes( bytes );
   }

   public static void PrintHexBytes( byte[] bytes )  {

      if (( bytes == null ) || ( bytes.Length == 0 ))
        {
            Console.WriteLine( "<none>" );
        }
        else  {
         for ( int i = 0; i < bytes.Length; i++ )
            Console.Write( "{0:X2} ", bytes[i] );
         Console.WriteLine();
      }
   }
}


/* 
This code produces the following output.

System.Text.UTF7Encoding       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 8   16  :B2 03 00 00 FF FC 04 00

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub Main()

      ' 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)
      '    a high-surrogate value (U+D8FF)
      '    a low-surrogate value (U+DCFF)
      Dim myChars() As Char = {"z"c, "a"c, ChrW(&H0306), ChrW(&H01FD), ChrW(&H03B2), ChrW(&HD8FF), ChrW(&HDCFF) }

      ' Get different encodings.
      Dim u7 As Encoding = Encoding.UTF7
      Dim u8 As Encoding = Encoding.UTF8
      Dim u16LE As Encoding = Encoding.Unicode
      Dim u16BE As Encoding = Encoding.BigEndianUnicode
      Dim u32 As Encoding = Encoding.UTF32

      ' Encode three characters starting at index 4, and print out the counts and the resulting bytes.
      PrintCountsAndBytes(myChars, 4, 3, u7)
      PrintCountsAndBytes(myChars, 4, 3, u8)
      PrintCountsAndBytes(myChars, 4, 3, u16LE)
      PrintCountsAndBytes(myChars, 4, 3, u16BE)
      PrintCountsAndBytes(myChars, 4, 3, u32)

   End Sub


   Public Shared Sub PrintCountsAndBytes(chars() As Char, index As Integer, count As Integer, enc As Encoding)

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

      ' Display the exact byte count.
      Dim iBC As Integer = enc.GetByteCount(chars, index, count)
      Console.Write(" {0,-3}", iBC)

      ' Display the maximum byte count.
      Dim iMBC As Integer = enc.GetMaxByteCount(count)
      Console.Write(" {0,-3} :", iMBC)

      ' Encode the array of chars.
      Dim bytes As Byte() = enc.GetBytes(chars, index, count)

      ' The following is an alternative way to encode the array of chars:
      ' 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 bytes(iBC - 1) As Byte
      ' enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) )

      ' Display all the encoded bytes.
      PrintHexBytes(bytes)

   End Sub


   Public Shared Sub PrintHexBytes(bytes() As Byte)

      If bytes Is Nothing OrElse bytes.Length = 0 Then
         Console.WriteLine("<none>")
      Else
         Dim i As Integer
         For i = 0 To bytes.Length - 1
            Console.Write("{0:X2} ", bytes(i))
         Next i
         Console.WriteLine()
      End If

   End Sub

End Class


'This code produces the following output.
'
'System.Text.UTF7Encoding       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding      : 8   16  :B2 03 00 00 FF FC 04 00

Megjegyzések

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 GetByteCount metódus meghatározza, hogy hány bájtot eredményez egy Unicode-karakterkészlet kódolása, és a GetBytes metódus végrehajtja a tényleges kódolást. A Encoding.GetBytes metódus különálló konverziókat vár, szemben a Encoder.GetBytes metódussal, amely több konverziót kezel egyetlen bemeneti adatfolyamon.

A verziók több verziója GetByteCountGetBytes 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 számos bemeneti karaktert kódolnia kell egy kódlapra, és több hívással kell feldolgoznia a karaktereket. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között, figyelembe véve a használt objektum által Encoder fenntartott állapotot. (Egy helyettesítő párokat tartalmazó karaktersorozat például magas helyettesítő karaktersorozattal végződhet. A Encoder emlékezni fog, hogy a magas helyettes, hogy lehet kombinálni egy alacsony helyettes elején a következő hívás. Encoding nem lesz képes fenntartani az állapotot, így a karakter lesz küldve a EncoderFallback.)

  • Ha az alkalmazás sztringbemeneteket kezel, a sztringverziót kell használnia GetBytes.

  • A Unicode karakterpuffer verziója GetBytes(Char*, Int32, Byte*, Int32) gyors technikákat tesz lehetővé, különösen az objektumot használó vagy a meglévő pufferekbe történő több hívás esetén Encoder . 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 GetBytes bájttömböket támogató verzió a legjobb választás.

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

Lásd még

A következőre érvényes:

GetBytes(String, 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ált, bájtokból álló tömbbe kódolja a megadott sztringben megadott count karakterek számát a megadott indexkarakterláncból kiindulva.

public:
 cli::array <System::Byte> ^ GetBytes(System::String ^ s, int index, int count);
public byte[] GetBytes(string s, int index, int count);
member this.GetBytes : string * int * int -> byte[]
Public Function GetBytes (s As String, index As Integer, count As Integer) As Byte()

Paraméterek

s
String

A kódolni kívánt karaktereket tartalmazó sztring.

index
Int32

A sztringen belüli index, amelyből elindíthatja a kódolást.

count
Int32

A kódolandó karakterek száma.

Válaszok

Byte[]

Egy bájttömb, amely a megadott karakterkészlet kódolásának eredményeit tartalmazza.

Példák

Az alábbi példa meghatározza a sztring vagy tartomány kódolásához szükséges bájtok számát, kódolja a karaktereket, és megjeleníti az eredményül kapott bájtokat.

using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // 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)
      //    a high-surrogate value (U+D8FF)
      //    a low-surrogate value (U+DCFF)
      String myStr = "za\u0306\u01FD\u03B2\uD8FF\uDCFF";

      // Get different encodings.
      Encoding  u7    = Encoding.UTF7;
      Encoding  u8    = Encoding.UTF8;
      Encoding  u16LE = Encoding.Unicode;
      Encoding  u16BE = Encoding.BigEndianUnicode;
      Encoding  u32   = Encoding.UTF32;

      // Encode the entire string, and print out the counts and the resulting bytes.
      Console.WriteLine( "Encoding the entire string:" );
      PrintCountsAndBytes( myStr, u7 );
      PrintCountsAndBytes( myStr, u8 );
      PrintCountsAndBytes( myStr, u16LE );
      PrintCountsAndBytes( myStr, u16BE );
      PrintCountsAndBytes( myStr, u32 );

      Console.WriteLine();

      // Encode three characters starting at index 4, and print out the counts and the resulting bytes.
      Console.WriteLine( "Encoding the characters from index 4 through 6:" );
      PrintCountsAndBytes( myStr, 4, 3, u7 );
      PrintCountsAndBytes( myStr, 4, 3, u8 );
      PrintCountsAndBytes( myStr, 4, 3, u16LE );
      PrintCountsAndBytes( myStr, 4, 3, u16BE );
      PrintCountsAndBytes( myStr, 4, 3, u32 );
   }

   public static void PrintCountsAndBytes( String s, Encoding enc )  {

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

      // Display the exact byte count.
      int iBC  = enc.GetByteCount( s );
      Console.Write( " {0,-3}", iBC );

      // Display the maximum byte count.
      int iMBC = enc.GetMaxByteCount( s.Length );
      Console.Write( " {0,-3} :", iMBC );

      // Encode the entire string.
      byte[] bytes = enc.GetBytes( s );

      // Display all the encoded bytes.
      PrintHexBytes( bytes );
   }

   public static void PrintCountsAndBytes( String s, int index, int count, Encoding enc )  {

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

      // Display the exact byte count.
      int iBC  = enc.GetByteCount( s.ToCharArray(), index, count );
      Console.Write( " {0,-3}", iBC );

      // Display the maximum byte count.
      int iMBC = enc.GetMaxByteCount( count );
      Console.Write( " {0,-3} :", iMBC );

      // Encode a range of characters in the string.
      byte[] bytes = new byte[iBC];
      enc.GetBytes( s, index, count, bytes, bytes.GetLowerBound(0) );

      // Display all the encoded bytes.
      PrintHexBytes( bytes );
   }

   public static void PrintHexBytes( byte[] bytes )  {

      if (( bytes == null ) || ( bytes.Length == 0 ))
        {
            Console.WriteLine( "<none>" );
        }
        else  {
         for ( int i = 0; i < bytes.Length; i++ )
            Console.Write( "{0:X2} ", bytes[i] );
         Console.WriteLine();
      }
   }
}


/* 
This code produces the following output.

Encoding the entire string:
System.Text.UTF7Encoding       : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding       : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 14  16  :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 14  16  :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 24  32  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00

Encoding the characters from index 4 through 6:
System.Text.UTF7Encoding       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 8   16  :B2 03 00 00 FF FC 04 00

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub Main()

      ' 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)
      '    a high-surrogate value (U+D8FF)
      '    a low-surrogate value (U+DCFF)
      Dim myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2) & ChrW(&HD8FF) & ChrW(&HDCFF)

      ' Get different encodings.
      Dim u7 As Encoding = Encoding.UTF7
      Dim u8 As Encoding = Encoding.UTF8
      Dim u16LE As Encoding = Encoding.Unicode
      Dim u16BE As Encoding = Encoding.BigEndianUnicode
      Dim u32 As Encoding = Encoding.UTF32

      ' Encode the entire string, and print out the counts and the resulting bytes.
      Console.WriteLine("Encoding the entire string:")
      PrintCountsAndBytes(myStr, u7)
      PrintCountsAndBytes(myStr, u8)
      PrintCountsAndBytes(myStr, u16LE)
      PrintCountsAndBytes(myStr, u16BE)
      PrintCountsAndBytes(myStr, u32)

      Console.WriteLine()

      ' Encode three characters starting at index 4, and print out the counts and the resulting bytes.
      Console.WriteLine("Encoding the characters from index 4 through 6:")
      PrintCountsAndBytes(myStr, 4, 3, u7)
      PrintCountsAndBytes(myStr, 4, 3, u8)
      PrintCountsAndBytes(myStr, 4, 3, u16LE)
      PrintCountsAndBytes(myStr, 4, 3, u16BE)
      PrintCountsAndBytes(myStr, 4, 3, u32)

   End Sub


   Overloads Public Shared Sub PrintCountsAndBytes(s As String, enc As Encoding)

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

      ' Display the exact byte count.
      Dim iBC As Integer = enc.GetByteCount(s)
      Console.Write(" {0,-3}", iBC)

      ' Display the maximum byte count.
      Dim iMBC As Integer = enc.GetMaxByteCount(s.Length)
      Console.Write(" {0,-3} :", iMBC)

      ' Encode the entire string.
      Dim bytes As Byte() = enc.GetBytes(s)

      ' Display all the encoded bytes.
      PrintHexBytes(bytes)

   End Sub


   Overloads Public Shared Sub PrintCountsAndBytes(s As String, index As Integer, count As Integer, enc As Encoding)

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

      ' Display the exact byte count.
      Dim iBC As Integer = enc.GetByteCount(s.ToCharArray(), index, count)
      Console.Write(" {0,-3}", iBC)

      ' Display the maximum byte count.
      Dim iMBC As Integer = enc.GetMaxByteCount(count)
      Console.Write(" {0,-3} :", iMBC)

      ' Encode a range of characters in the string.
      ' 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 bytes(iBC - 1) As Byte
      enc.GetBytes(s, index, count, bytes, bytes.GetLowerBound(0))

      ' Display all the encoded bytes.
      PrintHexBytes(bytes)

   End Sub


   Public Shared Sub PrintHexBytes(bytes() As Byte)

      If bytes Is Nothing OrElse bytes.Length = 0 Then
         Console.WriteLine("<none>")
      Else
         Dim i As Integer
         For i = 0 To bytes.Length - 1
            Console.Write("{0:X2} ", bytes(i))
         Next i
         Console.WriteLine()
      End If

   End Sub

End Class


'This code produces the following output.
'
'Encoding the entire string:
'System.Text.UTF7Encoding       : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
'System.Text.UTF8Encoding       : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding    : 14  16  :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding    : 14  16  :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
'System.Text.UTF32Encoding      : 24  32  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
'
'Encoding the characters from index 4 through 6:
'System.Text.UTF7Encoding       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding      : 8   16  :B2 03 00 00 FF FC 04 00

Megjegyzések

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 GetByteCount metódus meghatározza, hogy hány bájtot eredményez egy Unicode-karakterkészlet kódolása, és a GetBytes metódus végrehajtja a tényleges kódolást. A Encoding.GetBytes metódus különálló konverziókat vár, szemben a Encoder.GetBytes metódussal, amely több konverziót kezel egyetlen bemeneti adatfolyamon.

A verziók több verziója GetByteCountGetBytes 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 számos bemeneti karaktert kódolnia kell egy kódlapra, és több hívással kell feldolgoznia a karaktereket. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között, figyelembe véve a használt objektum által Encoder fenntartott állapotot. (Egy helyettesítő párokat tartalmazó karaktersorozat például magas helyettesítő karaktersorozattal végződhet. A Encoder emlékezni fog, hogy a magas helyettes, hogy lehet kombinálni egy alacsony helyettes elején a következő hívás. Encoding nem lesz képes fenntartani az állapotot, így a karakter lesz küldve a EncoderFallback.)

  • Ha az alkalmazás sztringbemeneteket kezel, a sztringverziót kell használnia GetBytes.

  • A Unicode karakterpuffer verziója GetBytes(Char*, Int32, Byte*, Int32) gyors technikákat tesz lehetővé, különösen az objektumot használó vagy a meglévő pufferekbe történő több hívás esetén Encoder . 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 GetBytes bájttömböket támogató verzió a legjobb választás.

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

A következőre érvényes:

GetBytes(Char*, Int32, Byte*, 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 karaktermutatótól kezdődő karakterkészletet bájtok sorozatába kódolja, amelyek a megadott bájtmutatótól kezdve vannak tárolva.

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

Paraméterek

chars
Char*

A kódolni kívánt első karakterre mutató mutató.

charCount
Int32

A kódolandó karakterek száma.

bytes
Byte*

Egy mutató arra a helyre, ahol elkezdi írni az eredményként kapott bájtsorozatot.

byteCount
Int32

Az írható bájtok maximális száma.

Válaszok

A paraméter által bytes megadott helyen írt bájtok tényleges száma.

Attribútumok

Kivételek

chars az null.

-vagy-

bytes az null.

charCount vagy byteCount kisebb, mint nulla.

byteCount kisebb, mint az eredményként kapott bájtok száma.

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

-és-

EncoderFallback EncoderExceptionFallbackértékre van állítva.

Megjegyzések

Az eredményként kapott bájtok tárolásához szükséges pontos tömbméret GetBytes kiszámításához hívja meg a metódust GetByteCount . A maximális tömbméret kiszámításához hívja meg a metódust GetMaxByteCount . A GetByteCount metódus általában kevesebb memória lefoglalását teszi lehetővé, míg a GetMaxByteCount metódus általában gyorsabban fut.

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

A GetByteCount metódus meghatározza, hogy hány bájtot eredményez egy Unicode-karakterkészlet kódolása, és a GetBytes metódus végrehajtja a tényleges kódolást. A GetBytes metódus különálló konverziókat vár, szemben a Encoder.GetBytes metódussal, amely több konverziót kezel egyetlen bemeneti adatfolyamon.

A verziók több verziója GetByteCountGetBytes 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 számos bemeneti karaktert kódolnia kell egy kódlapra, és több hívással kell feldolgoznia a karaktereket. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között, figyelembe véve a használt objektum által Encoder fenntartott állapotot. (Egy helyettesítő párokat tartalmazó karaktersorozat például magas helyettesítő karaktersorozattal végződhet. A Encoder emlékezni fog, hogy a magas helyettes, hogy lehet kombinálni egy alacsony helyettes elején a következő hívás. Encoding nem lesz képes fenntartani az állapotot, így a karakter lesz küldve a EncoderFallback.)

  • Ha az alkalmazás sztringbemeneteket kezel, a sztringverziót kell használnia GetBytes.

  • A Unicode karakterpuffer verziója GetBytes(Char*, Int32, Byte*, Int32) gyors technikákat tesz lehetővé, különösen az objektumot használó vagy a meglévő pufferekbe történő több hívás esetén Encoder . 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 GetBytes bájttömböket támogató verzió a legjobb választás.

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

Lásd még

A következőre érvényes:

GetBytes(Char[], Int32, Int32, Byte[], 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ül van bírálva, a megadott karaktertömbből a megadott bájttömbbe kódol egy karakterkészletet.

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

Paraméterek

chars
Char[]

A kódolandó karaktereket tartalmazó karaktertömb.

charIndex
Int32

Az első kódolandó karakter indexe.

charCount
Int32

A kódolandó karakterek száma.

bytes
Byte[]

Az eredményként kapott bájtsorozatot tartalmazó bájttömb.

byteIndex
Int32

Az az index, amelynél elkezdi írni az eredményként kapott bájtsorozatot.

Válaszok

A beírt bytesbájtok tényleges száma.

Kivételek

chars az null.

-vagy-

bytes az null.

charIndex vagy charCountbyteIndex kisebb, mint nulla.

-vagy-

charIndex és charCount ne jelölje az érvényes tartományt a következőben chars: .

-vagy-

byteIndex érvénytelen index a következőben bytes: .

bytes nem rendelkezik elegendő kapacitással a tömb végétől byteIndex a kapott bájtok elhelyezéséhez.

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

-és-

EncoderFallback EncoderExceptionFallbackértékre van állítva.

Példák

Az alábbi példa meghatározza a karaktertömb három karakterének kódolásához, a karakterek kódolásához és az eredményként kapott bájtok megjelenítéséhez szükséges bájtok számát.

using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // 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)
      //    a high-surrogate value (U+D8FF)
      //    a low-surrogate value (U+DCFF)
      char[] myChars = new char[] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };

      // Get different encodings.
      Encoding  u7    = Encoding.UTF7;
      Encoding  u8    = Encoding.UTF8;
      Encoding  u16LE = Encoding.Unicode;
      Encoding  u16BE = Encoding.BigEndianUnicode;
      Encoding  u32   = Encoding.UTF32;

      // Encode three characters starting at index 4, and print out the counts and the resulting bytes.
      PrintCountsAndBytes( myChars, 4, 3, u7 );
      PrintCountsAndBytes( myChars, 4, 3, u8 );
      PrintCountsAndBytes( myChars, 4, 3, u16LE );
      PrintCountsAndBytes( myChars, 4, 3, u16BE );
      PrintCountsAndBytes( myChars, 4, 3, u32 );
   }

   public static void PrintCountsAndBytes( char[] chars, int index, int count, Encoding enc )  {

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

      // Display the exact byte count.
      int iBC  = enc.GetByteCount( chars, index, count );
      Console.Write( " {0,-3}", iBC );

      // Display the maximum byte count.
      int iMBC = enc.GetMaxByteCount( count );
      Console.Write( " {0,-3} :", iMBC );

      // Encode the array of chars.
      byte[] bytes = enc.GetBytes( chars, index, count );

      // The following is an alternative way to encode the array of chars:
      // byte[] bytes = new byte[iBC];
      // enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) );

      // Display all the encoded bytes.
      PrintHexBytes( bytes );
   }

   public static void PrintHexBytes( byte[] bytes )  {

      if (( bytes == null ) || ( bytes.Length == 0 ))
        {
            Console.WriteLine( "<none>" );
        }
        else  {
         for ( int i = 0; i < bytes.Length; i++ )
            Console.Write( "{0:X2} ", bytes[i] );
         Console.WriteLine();
      }
   }
}


/* 
This code produces the following output.

System.Text.UTF7Encoding       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 8   16  :B2 03 00 00 FF FC 04 00

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub Main()

      ' 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)
      '    a high-surrogate value (U+D8FF)
      '    a low-surrogate value (U+DCFF)
      Dim myChars() As Char = {"z"c, "a"c, ChrW(&H0306), ChrW(&H01FD), ChrW(&H03B2), ChrW(&HD8FF), ChrW(&HDCFF) }

      ' Get different encodings.
      Dim u7 As Encoding = Encoding.UTF7
      Dim u8 As Encoding = Encoding.UTF8
      Dim u16LE As Encoding = Encoding.Unicode
      Dim u16BE As Encoding = Encoding.BigEndianUnicode
      Dim u32 As Encoding = Encoding.UTF32

      ' Encode three characters starting at index 4, and print out the counts and the resulting bytes.
      PrintCountsAndBytes(myChars, 4, 3, u7)
      PrintCountsAndBytes(myChars, 4, 3, u8)
      PrintCountsAndBytes(myChars, 4, 3, u16LE)
      PrintCountsAndBytes(myChars, 4, 3, u16BE)
      PrintCountsAndBytes(myChars, 4, 3, u32)

   End Sub


   Public Shared Sub PrintCountsAndBytes(chars() As Char, index As Integer, count As Integer, enc As Encoding)

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

      ' Display the exact byte count.
      Dim iBC As Integer = enc.GetByteCount(chars, index, count)
      Console.Write(" {0,-3}", iBC)

      ' Display the maximum byte count.
      Dim iMBC As Integer = enc.GetMaxByteCount(count)
      Console.Write(" {0,-3} :", iMBC)

      ' Encode the array of chars.
      Dim bytes As Byte() = enc.GetBytes(chars, index, count)

      ' The following is an alternative way to encode the array of chars:
      ' 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 bytes(iBC - 1) As Byte
      ' enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) )

      ' Display all the encoded bytes.
      PrintHexBytes(bytes)

   End Sub


   Public Shared Sub PrintHexBytes(bytes() As Byte)

      If bytes Is Nothing OrElse bytes.Length = 0 Then
         Console.WriteLine("<none>")
      Else
         Dim i As Integer
         For i = 0 To bytes.Length - 1
            Console.Write("{0:X2} ", bytes(i))
         Next i
         Console.WriteLine()
      End If

   End Sub

End Class


'This code produces the following output.
'
'System.Text.UTF7Encoding       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding      : 8   16  :B2 03 00 00 FF FC 04 00

Megjegyzések

Az eredményként kapott bájtok tárolásához szükséges GetBytes pontos tömbméret kiszámításához hívja meg a metódust GetByteCount . A maximális tömbméret kiszámításához hívja meg a metódust GetMaxByteCount . A GetByteCount metódus általában kevesebb memória lefoglalását teszi lehetővé, míg a GetMaxByteCount metódus általában gyorsabban fut.

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 GetByteCount metódus meghatározza, hogy hány bájtot eredményez egy Unicode-karakterkészlet kódolása, és a GetBytes metódus végrehajtja a tényleges kódolást. A Encoding.GetBytes metódus különálló konverziókat vár, szemben a Encoder.GetBytes metódussal, amely több konverziót kezel egyetlen bemeneti adatfolyamon.

A verziók több verziója GetByteCountGetBytes 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 számos bemeneti karaktert kódolnia kell egy kódlapra, és több hívással kell feldolgoznia a karaktereket. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között, figyelembe véve a használt objektum által Encoder fenntartott állapotot. (Egy helyettesítő párokat tartalmazó karaktersorozat például magas helyettesítő karaktersorozattal végződhet. A Encoder emlékezni fog, hogy a magas helyettes, hogy lehet kombinálni egy alacsony helyettes elején a következő hívás. Encoding nem lesz képes fenntartani az állapotot, így a karakter lesz küldve a EncoderFallback.)

  • Ha az alkalmazás sztringbemeneteket kezel, a sztringverziót kell használnia GetBytes.

  • A Unicode karakterpuffer verziója GetBytes(Char*, Int32, Byte*, Int32) gyors technikákat tesz lehetővé, különösen az objektumot használó vagy a meglévő pufferekbe történő több hívás esetén Encoder . 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 GetBytes bájttömböket támogató verzió a legjobb választás.

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

Lásd még

A következőre érvényes:

GetBytes(String, Int32, Int32, Byte[], Int32)

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

Származtatott osztály felülírásakor a megadott karakterlánc karakterkészletét kódolja a megadott bájttömbbe.

public:
 virtual int GetBytes(System::String ^ s, int charIndex, int charCount, cli::array <System::Byte> ^ bytes, int byteIndex);
public virtual int GetBytes(string s, int charIndex, int charCount, byte[] bytes, int byteIndex);
abstract member GetBytes : string * int * int * byte[] * int -> int
override this.GetBytes : string * int * int * byte[] * int -> int
Public Overridable Function GetBytes (s As String, charIndex As Integer, charCount As Integer, bytes As Byte(), byteIndex As Integer) As Integer

Paraméterek

s
String

A kódolandó karakterkészletet tartalmazó sztring.

charIndex
Int32

Az első kódolandó karakter indexe.

charCount
Int32

A kódolandó karakterek száma.

bytes
Byte[]

Az eredményként kapott bájtsorozatot tartalmazó bájttömb.

byteIndex
Int32

Az az index, amelynél elkezdi írni az eredményként kapott bájtsorozatot.

Válaszok

A beírt bytesbájtok tényleges száma.

Kivételek

s az null.

-vagy-

bytes az null.

charIndex vagy charCountbyteIndex kisebb, mint nulla.

-vagy-

charIndex és charCount ne jelölje az érvényes tartományt a következőben s: .

-vagy-

byteIndex érvénytelen index a következőben bytes: .

bytes nem rendelkezik elegendő kapacitással a tömb végétől byteIndex a kapott bájtok elhelyezéséhez.

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

-és-

EncoderFallback EncoderExceptionFallbackértékre van állítva.

Példák

Az alábbi példa meghatározza a sztring vagy tartomány kódolásához szükséges bájtok számát, kódolja a karaktereket, és megjeleníti az eredményül kapott bájtokat.

using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // 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)
      //    a high-surrogate value (U+D8FF)
      //    a low-surrogate value (U+DCFF)
      String myStr = "za\u0306\u01FD\u03B2\uD8FF\uDCFF";

      // Get different encodings.
      Encoding  u7    = Encoding.UTF7;
      Encoding  u8    = Encoding.UTF8;
      Encoding  u16LE = Encoding.Unicode;
      Encoding  u16BE = Encoding.BigEndianUnicode;
      Encoding  u32   = Encoding.UTF32;

      // Encode the entire string, and print out the counts and the resulting bytes.
      Console.WriteLine( "Encoding the entire string:" );
      PrintCountsAndBytes( myStr, u7 );
      PrintCountsAndBytes( myStr, u8 );
      PrintCountsAndBytes( myStr, u16LE );
      PrintCountsAndBytes( myStr, u16BE );
      PrintCountsAndBytes( myStr, u32 );

      Console.WriteLine();

      // Encode three characters starting at index 4, and print out the counts and the resulting bytes.
      Console.WriteLine( "Encoding the characters from index 4 through 6:" );
      PrintCountsAndBytes( myStr, 4, 3, u7 );
      PrintCountsAndBytes( myStr, 4, 3, u8 );
      PrintCountsAndBytes( myStr, 4, 3, u16LE );
      PrintCountsAndBytes( myStr, 4, 3, u16BE );
      PrintCountsAndBytes( myStr, 4, 3, u32 );
   }

   public static void PrintCountsAndBytes( String s, Encoding enc )  {

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

      // Display the exact byte count.
      int iBC  = enc.GetByteCount( s );
      Console.Write( " {0,-3}", iBC );

      // Display the maximum byte count.
      int iMBC = enc.GetMaxByteCount( s.Length );
      Console.Write( " {0,-3} :", iMBC );

      // Encode the entire string.
      byte[] bytes = enc.GetBytes( s );

      // Display all the encoded bytes.
      PrintHexBytes( bytes );
   }

   public static void PrintCountsAndBytes( String s, int index, int count, Encoding enc )  {

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

      // Display the exact byte count.
      int iBC  = enc.GetByteCount( s.ToCharArray(), index, count );
      Console.Write( " {0,-3}", iBC );

      // Display the maximum byte count.
      int iMBC = enc.GetMaxByteCount( count );
      Console.Write( " {0,-3} :", iMBC );

      // Encode a range of characters in the string.
      byte[] bytes = new byte[iBC];
      enc.GetBytes( s, index, count, bytes, bytes.GetLowerBound(0) );

      // Display all the encoded bytes.
      PrintHexBytes( bytes );
   }

   public static void PrintHexBytes( byte[] bytes )  {

      if (( bytes == null ) || ( bytes.Length == 0 ))
        {
            Console.WriteLine( "<none>" );
        }
        else  {
         for ( int i = 0; i < bytes.Length; i++ )
            Console.Write( "{0:X2} ", bytes[i] );
         Console.WriteLine();
      }
   }
}


/* 
This code produces the following output.

Encoding the entire string:
System.Text.UTF7Encoding       : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding       : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 14  16  :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 14  16  :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 24  32  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00

Encoding the characters from index 4 through 6:
System.Text.UTF7Encoding       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 8   16  :B2 03 00 00 FF FC 04 00

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub Main()

      ' 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)
      '    a high-surrogate value (U+D8FF)
      '    a low-surrogate value (U+DCFF)
      Dim myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2) & ChrW(&HD8FF) & ChrW(&HDCFF)

      ' Get different encodings.
      Dim u7 As Encoding = Encoding.UTF7
      Dim u8 As Encoding = Encoding.UTF8
      Dim u16LE As Encoding = Encoding.Unicode
      Dim u16BE As Encoding = Encoding.BigEndianUnicode
      Dim u32 As Encoding = Encoding.UTF32

      ' Encode the entire string, and print out the counts and the resulting bytes.
      Console.WriteLine("Encoding the entire string:")
      PrintCountsAndBytes(myStr, u7)
      PrintCountsAndBytes(myStr, u8)
      PrintCountsAndBytes(myStr, u16LE)
      PrintCountsAndBytes(myStr, u16BE)
      PrintCountsAndBytes(myStr, u32)

      Console.WriteLine()

      ' Encode three characters starting at index 4, and print out the counts and the resulting bytes.
      Console.WriteLine("Encoding the characters from index 4 through 6:")
      PrintCountsAndBytes(myStr, 4, 3, u7)
      PrintCountsAndBytes(myStr, 4, 3, u8)
      PrintCountsAndBytes(myStr, 4, 3, u16LE)
      PrintCountsAndBytes(myStr, 4, 3, u16BE)
      PrintCountsAndBytes(myStr, 4, 3, u32)

   End Sub


   Overloads Public Shared Sub PrintCountsAndBytes(s As String, enc As Encoding)

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

      ' Display the exact byte count.
      Dim iBC As Integer = enc.GetByteCount(s)
      Console.Write(" {0,-3}", iBC)

      ' Display the maximum byte count.
      Dim iMBC As Integer = enc.GetMaxByteCount(s.Length)
      Console.Write(" {0,-3} :", iMBC)

      ' Encode the entire string.
      Dim bytes As Byte() = enc.GetBytes(s)

      ' Display all the encoded bytes.
      PrintHexBytes(bytes)

   End Sub


   Overloads Public Shared Sub PrintCountsAndBytes(s As String, index As Integer, count As Integer, enc As Encoding)

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

      ' Display the exact byte count.
      Dim iBC As Integer = enc.GetByteCount(s.ToCharArray(), index, count)
      Console.Write(" {0,-3}", iBC)

      ' Display the maximum byte count.
      Dim iMBC As Integer = enc.GetMaxByteCount(count)
      Console.Write(" {0,-3} :", iMBC)

      ' Encode a range of characters in the string.
      ' 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 bytes(iBC - 1) As Byte
      enc.GetBytes(s, index, count, bytes, bytes.GetLowerBound(0))

      ' Display all the encoded bytes.
      PrintHexBytes(bytes)

   End Sub


   Public Shared Sub PrintHexBytes(bytes() As Byte)

      If bytes Is Nothing OrElse bytes.Length = 0 Then
         Console.WriteLine("<none>")
      Else
         Dim i As Integer
         For i = 0 To bytes.Length - 1
            Console.Write("{0:X2} ", bytes(i))
         Next i
         Console.WriteLine()
      End If

   End Sub

End Class


'This code produces the following output.
'
'Encoding the entire string:
'System.Text.UTF7Encoding       : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
'System.Text.UTF8Encoding       : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding    : 14  16  :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding    : 14  16  :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
'System.Text.UTF32Encoding      : 24  32  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
'
'Encoding the characters from index 4 through 6:
'System.Text.UTF7Encoding       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding      : 8   16  :B2 03 00 00 FF FC 04 00

Megjegyzések

Az eredményként kapott bájtok tárolásához szükséges GetBytes pontos tömbméret kiszámításához hívja meg a metódust GetByteCount . A maximális tömbméret kiszámításához hívja meg a metódust GetMaxByteCount . A GetByteCount metódus általában kevesebb memória lefoglalását teszi lehetővé, míg a GetMaxByteCount metódus általában gyorsabban fut.

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 GetByteCount metódus meghatározza, hogy hány bájtot eredményez egy Unicode-karakterkészlet kódolása, és a GetBytes metódus végrehajtja a tényleges kódolást. A Encoding.GetBytes metódus különálló konverziókat vár, szemben a Encoder.GetBytes metódussal, amely több konverziót kezel egyetlen bemeneti adatfolyamon.

A verziók több verziója GetByteCountGetBytes 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 számos bemeneti karaktert kódolnia kell egy kódlapra, és több hívással kell feldolgoznia a karaktereket. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között, figyelembe véve a használt objektum által Encoder fenntartott állapotot. (Egy helyettesítő párokat tartalmazó karaktersorozat például magas helyettesítő karaktersorozattal végződhet. A Encoder emlékezni fog, hogy a magas helyettes, hogy lehet kombinálni egy alacsony helyettes elején a következő hívás. Encoding nem lesz képes fenntartani az állapotot, így a karakter lesz küldve a EncoderFallback.)

  • Ha az alkalmazás sztringbemeneteket kezel, a sztringverziót kell használnia GetBytes.

  • A Unicode karakterpuffer verziója GetBytes(Char*, Int32, Byte*, Int32) gyors technikákat tesz lehetővé, különösen az objektumot használó vagy a meglévő pufferekbe történő több hívás esetén Encoder . 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 GetBytes bájttömböket támogató verzió a legjobb választás.

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

Lásd még

A következőre érvényes: