Encoding.GetByteCount Metoda

Definice

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním sady znaků.

Přetížení

Name Description
GetByteCount(String, Int32, Int32)

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním sady znaků ze zadaného řetězce.

GetByteCount(Char[], Int32, Int32)

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním sady znaků ze zadaného pole znaků.

GetByteCount(Char*, Int32)

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním sady znaků počínaje zadaným ukazatelem znaku.

GetByteCount(String)

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním znaků v zadaném řetězci.

GetByteCount(ReadOnlySpan<Char>)

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním znaků v zadaném rozsahu znaků.

GetByteCount(Char[])

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním všech znaků v zadaném poli znaků.

GetByteCount(String, Int32, Int32)

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním sady znaků ze zadaného řetězce.

public:
 int GetByteCount(System::String ^ s, int index, int count);
public int GetByteCount(string s, int index, int count);
member this.GetByteCount : string * int * int -> int
Public Function GetByteCount (s As String, index As Integer, count As Integer) As Integer

Parametry

s
String

Řetězec obsahující sadu znaků, které se mají kódovat.

index
Int32

Index prvního znaku, který se má kódovat.

count
Int32

Počet znaků, které se mají zakódovat.

Návraty

Počet bajtů vytvořených kódováním řetězce.

Příklady

Následující příklad určuje počet bajtů potřebných ke kódování tří znaků z pole znaků, kóduje znaky a zobrazí výsledné bajty.

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

Poznámky

Pokud chcete vypočítat přesnou velikost pole potřebnou GetBytes k uložení výsledných bajtů, zavolejte metodu GetByteCount . Pokud chcete vypočítat maximální velikost pole, zavolejte metodu GetMaxByteCount . Metoda GetByteCount obecně umožňuje přidělení menší paměti, zatímco GetMaxByteCount metoda obvykle provádí rychleji.

Metoda GetByteCount určuje, kolik bajtů má za následek kódování sady znaků Unicode a GetBytes metoda provádí skutečné kódování. Metoda GetBytes očekává diskrétní převody, na rozdíl od Encoder.GetBytes metody, která zpracovává více převodů v jednom vstupním datovém proudu.

Podporuje se několik verzí GetByteCount a GetBytes je podporováno. Tady je několik aspektů programování pro použití těchto metod:

  • Aplikace může potřebovat kódovat mnoho vstupních znaků na znakovou stránku a zpracovávat znaky pomocí více volání. V tomto případě pravděpodobně budete muset udržovat stav mezi voláními, přičemž berete v úvahu stav, který je trvalý použitým objektem Encoder .

  • Pokud vaše aplikace zpracovává řetězcové vstupy, doporučuje se verze GetBytes řetězce.

  • Verze GetBytes(Char*, Int32, Byte*, Int32) vyrovnávací paměti znaků Unicode umožňuje některé rychlé techniky, zejména s více voláními pomocí objektu Encoder nebo vložení do stávajících vyrovnávacích pamětí. Mějte však na paměti, že tato verze metody je někdy nebezpečná, protože jsou vyžadovány ukazatele.

  • Pokud vaše aplikace musí převést velké množství dat, měla by znovu použít výstupní vyrovnávací paměť. V tomto případě je nejlepší volbou verze, GetBytes která podporuje pole bajtů.

  • Zvažte použití Encoder.Convert metody místo GetByteCount. Metoda převodu převede co nejvíce dat a vyvolá výjimku, pokud je výstupní vyrovnávací paměť příliš malá. Pro průběžné kódování datového proudu je tato metoda často nejlepší volbou.

Platí pro

GetByteCount(Char[], Int32, Int32)

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním sady znaků ze zadaného pole znaků.

public:
 abstract int GetByteCount(cli::array <char> ^ chars, int index, int count);
public abstract int GetByteCount(char[] chars, int index, int count);
abstract member GetByteCount : char[] * int * int -> int
Public MustOverride Function GetByteCount (chars As Char(), index As Integer, count As Integer) As Integer

Parametry

chars
Char[]

Pole znaků obsahující sadu znaků, které se mají kódovat.

index
Int32

Index prvního znaku, který se má kódovat.

count
Int32

Počet znaků, které se mají zakódovat.

Návraty

Počet bajtů vytvořených kódováním zadaných znaků.

Výjimky

chars je null.

index nebo count je menší než nula.

nebo

index a count neoznamujte platný rozsah v chars.

Došlo k záložnímu použití (další informace najdete v tématu Kódování znaků v .NET).

a

EncoderFallback je nastaveno na EncoderExceptionFallback.

Příklady

Následující příklad určuje počet bajtů potřebných ke kódování tří znaků z pole znaků, kóduje znaky a zobrazí výsledné bajty.

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

Poznámky

Pokud chcete vypočítat přesnou velikost pole potřebnou GetBytes k uložení výsledných bajtů, zavolejte metodu GetByteCount . Pokud chcete vypočítat maximální velikost pole, zavolejte metodu GetMaxByteCount . Metoda GetByteCount obecně umožňuje přidělení menší paměti, zatímco GetMaxByteCount metoda obvykle provádí rychleji.

Metoda GetByteCount určuje, kolik bajtů má za následek kódování sady znaků Unicode a GetBytes metoda provádí skutečné kódování. Metoda GetBytes očekává diskrétní převody, na rozdíl od Encoder.GetBytes metody, která zpracovává více převodů v jednom vstupním datovém proudu.

Podporuje se několik verzí GetByteCount a GetBytes je podporováno. Tady je několik aspektů programování pro použití těchto metod:

  • Aplikace může potřebovat kódovat mnoho vstupních znaků na znakovou stránku a zpracovávat znaky pomocí více volání. V tomto případě pravděpodobně budete muset udržovat stav mezi voláními, přičemž berete v úvahu stav, který je trvalý použitým objektem Encoder .

  • Pokud vaše aplikace zpracovává řetězcové vstupy, doporučuje se verze GetBytes řetězce.

  • Verze GetBytes(Char*, Int32, Byte*, Int32) vyrovnávací paměti znaků Unicode umožňuje některé rychlé techniky, zejména s více voláními pomocí objektu Encoder nebo vložení do stávajících vyrovnávacích pamětí. Mějte však na paměti, že tato verze metody je někdy nebezpečná, protože jsou vyžadovány ukazatele.

  • Pokud vaše aplikace musí převést velké množství dat, měla by znovu použít výstupní vyrovnávací paměť. V tomto případě je nejlepší volbou verze, GetBytes která podporuje pole bajtů.

  • Zvažte použití Encoder.Convert metody místo GetByteCount. Metoda převodu převede co nejvíce dat a vyvolá výjimku, pokud je výstupní vyrovnávací paměť příliš malá. Pro průběžné kódování datového proudu je tato metoda často nejlepší volbou.

Viz také

Platí pro

GetByteCount(Char*, Int32)

Důležité

Toto rozhraní API neodpovídá specifikaci CLS.

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním sady znaků počínaje zadaným ukazatelem znaku.

public:
 virtual int GetByteCount(char* chars, int count);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public virtual int GetByteCount(char* chars, int count);
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetByteCount(char* chars, int count);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetByteCount(char* chars, int count);
[System.CLSCompliant(false)]
public virtual int GetByteCount(char* chars, int count);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
abstract member GetByteCount : nativeptr<char> * int -> int
override this.GetByteCount : nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetByteCount : nativeptr<char> * int -> int
override this.GetByteCount : nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetByteCount : nativeptr<char> * int -> int
override this.GetByteCount : nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
abstract member GetByteCount : nativeptr<char> * int -> int
override this.GetByteCount : nativeptr<char> * int -> int

Parametry

chars
Char*

Ukazatel na první znak, který se má kódovat.

count
Int32

Počet znaků, které se mají zakódovat.

Návraty

Počet bajtů vytvořených kódováním zadaných znaků.

Atributy

Výjimky

chars je null.

Hodnota count je menší než nula.

Došlo k záložnímu použití (další informace najdete v tématu Kódování znaků v .NET).

a

EncoderFallback je nastaveno na EncoderExceptionFallback.

Poznámky

Chcete-li vypočítat přesnou velikost pole, která GetBytes vyžaduje uložení výsledných bajtů, měli byste volat metodu GetByteCount . Pokud chcete vypočítat maximální velikost pole, zavolejte metodu GetMaxByteCount . Metoda GetByteCount obecně umožňuje přidělení menší paměti, zatímco GetMaxByteCount metoda obvykle provádí rychleji.

Metoda GetByteCount(Char*, Int32) určuje, kolik bajtů má za následek kódování sady znaků Unicode a GetBytes(Char*, Int32, Byte*, Int32) metoda provádí skutečné kódování. Metoda GetBytes očekává diskrétní převody, na rozdíl od Encoder.GetBytes metody, která zpracovává více převodů v jednom vstupním datovém proudu.

Podporuje se několik verzí GetByteCount a GetBytes je podporováno. Při použití těchto metod je potřeba vzít v úvahu následující skutečnosti:

  • Aplikace může potřebovat kódovat mnoho vstupních znaků na znakovou stránku a zpracovávat znaky pomocí více volání. V tomto případě pravděpodobně budete muset udržovat stav mezi voláními, přičemž berete v úvahu stav, který je trvalý použitým objektem Encoder .

  • Pokud vaše aplikace zpracovává řetězcové vstupy, měli byste použít řetězcovou verzi GetBytes metody.

  • Verze GetBytes vyrovnávací paměti znaků Unicode umožňuje některé rychlé techniky, zejména s více voláními pomocí objektu Encoder nebo vložení do stávajících vyrovnávacích pamětí. Mějte však na paměti, že tato verze metody je někdy nebezpečná, protože jsou vyžadovány ukazatele.

  • Pokud vaše aplikace musí převést velké množství dat, měla by znovu použít výstupní vyrovnávací paměť. V tomto případě je nejlepší volbou verze, GetBytes která podporuje pole bajtů.

  • Zvažte použití Encoder.Convert metody místo GetByteCount. Metoda převodu převede co nejvíce dat a vyvolá výjimku, pokud je výstupní vyrovnávací paměť příliš malá. Pro průběžné kódování datového proudu je tato metoda často nejlepší volbou.

Viz také

Platí pro

GetByteCount(String)

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním znaků v zadaném řetězci.

public:
 virtual int GetByteCount(System::String ^ s);
public virtual int GetByteCount(string s);
abstract member GetByteCount : string -> int
override this.GetByteCount : string -> int
Public Overridable Function GetByteCount (s As String) As Integer

Parametry

s
String

Řetězec obsahující sadu znaků, které se mají kódovat.

Návraty

Počet bajtů vytvořených kódováním zadaných znaků.

Výjimky

Došlo k záložnímu použití (další informace najdete v tématu Kódování znaků v .NET).

a

EncoderFallback je nastaveno na EncoderExceptionFallback.

Příklady

Následující příklad určuje počet bajtů potřebných ke kódování řetězce nebo rozsahu v řetězci, kóduje znaky a zobrazí výsledné bajty.

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

Poznámky

Pokud chcete vypočítat přesnou velikost pole potřebnou GetBytes k uložení výsledných bajtů, zavolejte metodu GetByteCount . Pokud chcete vypočítat maximální velikost pole, zavolejte metodu GetMaxByteCount . Metoda GetByteCount obecně umožňuje přidělení menší paměti, zatímco GetMaxByteCount metoda obvykle provádí rychleji.

Metoda GetByteCount určuje, kolik bajtů má za následek kódování sady znaků Unicode a GetBytes metoda provádí skutečné kódování. Metoda GetBytes očekává diskrétní převody, na rozdíl od Encoder.GetBytes metody, která zpracovává více převodů v jednom vstupním datovém proudu.

Podporuje se několik verzí GetByteCount a GetBytes je podporováno. Tady je několik aspektů programování pro použití těchto metod:

  • Aplikace může potřebovat kódovat mnoho vstupních znaků na znakovou stránku a zpracovávat znaky pomocí více volání. V tomto případě pravděpodobně budete muset udržovat stav mezi voláními, přičemž berete v úvahu stav, který je trvalý použitým objektem Encoder .

  • Pokud vaše aplikace zpracovává řetězcové vstupy, doporučuje se verze GetBytes řetězce.

  • Verze GetBytes(Char*, Int32, Byte*, Int32) vyrovnávací paměti znaků Unicode umožňuje některé rychlé techniky, zejména s více voláními pomocí objektu Encoder nebo vložení do stávajících vyrovnávacích pamětí. Mějte však na paměti, že tato verze metody je někdy nebezpečná, protože jsou vyžadovány ukazatele.

  • Pokud vaše aplikace musí převést velké množství dat, měla by znovu použít výstupní vyrovnávací paměť. V tomto případě je nejlepší volbou verze, GetBytes která podporuje pole bajtů.

  • Zvažte použití Encoder.Convert metody místo GetByteCount. Metoda převodu převede co nejvíce dat a vyvolá výjimku, pokud je výstupní vyrovnávací paměť příliš malá. Pro průběžné kódování datového proudu je tato metoda často nejlepší volbou.

Viz také

Platí pro

GetByteCount(ReadOnlySpan<Char>)

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním znaků v zadaném rozsahu znaků.

public:
 virtual int GetByteCount(ReadOnlySpan<char> chars);
public virtual int GetByteCount(ReadOnlySpan<char> chars);
abstract member GetByteCount : ReadOnlySpan<char> -> int
override this.GetByteCount : ReadOnlySpan<char> -> int
Public Overridable Function GetByteCount (chars As ReadOnlySpan(Of Char)) As Integer

Parametry

chars
ReadOnlySpan<Char>

Rozsah znaků, které se mají kódovat.

Návraty

Počet bajtů vytvořených kódováním zadaného rozsahu znaků.

Poznámky

Pokud chcete vypočítat přesnou velikost rozsahu potřebnou GetBytes k uložení výsledných bajtů, zavolejte metodu GetByteCount . Pokud chcete vypočítat maximální velikost rozsahu, zavolejte metodu GetMaxByteCount . Metoda GetByteCount obecně umožňuje přidělení menší paměti, zatímco GetMaxByteCount metoda obvykle provádí rychleji.

Metoda GetByteCount určuje, kolik bajtů má za následek kódování sady znaků Unicode a GetBytes metoda provádí skutečné kódování. Metoda GetBytes očekává diskrétní převody, na rozdíl od Encoder.GetBytes metody, která zpracovává více převodů v jednom vstupním datovém proudu.

Podporuje se několik verzí GetByteCount a GetBytes je podporováno. Tady je několik aspektů programování pro použití těchto metod:

  • Aplikace může potřebovat kódovat mnoho vstupních znaků na znakovou stránku a zpracovávat znaky pomocí více volání. V tomto případě pravděpodobně budete muset udržovat stav mezi voláními, přičemž berete v úvahu stav, který je trvalý použitým objektem Encoder .

  • Pokud vaše aplikace zpracovává rozsah vstupů znaků, doporučuje se verze rozsahu GetBytes .

  • Zvažte použití Encoder.Convert metody místo GetByteCount. Metoda převodu převede co nejvíce dat a vyvolá výjimku, pokud je vyrovnávací paměť výstupního rozsahu příliš malá. Pro průběžné kódování datového proudu je tato metoda často nejlepší volbou.

Platí pro

GetByteCount(Char[])

Při přepsání v odvozené třídě vypočítá počet bajtů vytvořených kódováním všech znaků v zadaném poli znaků.

public:
 virtual int GetByteCount(cli::array <char> ^ chars);
public virtual int GetByteCount(char[] chars);
abstract member GetByteCount : char[] -> int
override this.GetByteCount : char[] -> int
Public Overridable Function GetByteCount (chars As Char()) As Integer

Parametry

chars
Char[]

Pole znaků obsahující znaky, které se mají kódovat.

Návraty

Počet bajtů vytvořených kódováním všech znaků v zadaném poli znaků.

Výjimky

chars je null.

Došlo k záložnímu použití (další informace najdete v tématu Kódování znaků v .NET).

a

EncoderFallback je nastaveno na EncoderExceptionFallback.

Příklady

Následující příklad určuje počet bajtů potřebných ke kódování pole znaků, kóduje znaky a zobrazí výsledné bajty.

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

Poznámky

Pokud chcete vypočítat přesnou velikost pole potřebnou GetBytes k uložení výsledných bajtů, zavolejte metodu GetByteCount . Pokud chcete vypočítat maximální velikost pole, zavolejte metodu GetMaxByteCount . Metoda GetByteCount obecně umožňuje přidělení menší paměti, zatímco GetMaxByteCount metoda obvykle provádí rychleji.

Metoda GetByteCount určuje, kolik bajtů má za následek kódování sady znaků Unicode a GetBytes metoda provádí skutečné kódování. Metoda GetBytes očekává diskrétní převody, na rozdíl od Encoder.GetBytes metody, která zpracovává více převodů v jednom vstupním datovém proudu.

Podporuje se několik verzí GetByteCount a GetBytes je podporováno. Tady je několik aspektů programování pro použití těchto metod:

  • Aplikace může potřebovat kódovat mnoho vstupních znaků na znakovou stránku a zpracovávat znaky pomocí více volání. V tomto případě pravděpodobně budete muset udržovat stav mezi voláními, přičemž berete v úvahu stav, který je trvalý použitým objektem Encoder .

  • Pokud vaše aplikace zpracovává řetězcové vstupy, měli byste použít řetězcové verze GetBytes metody.

  • Verze GetBytes(Char*, Int32, Byte*, Int32) vyrovnávací paměti znaků Unicode umožňuje některé rychlé techniky, zejména s více voláními pomocí objektu Encoder nebo vložení do stávajících vyrovnávacích pamětí. Mějte však na paměti, že tato verze metody je někdy nebezpečná, protože jsou vyžadovány ukazatele.

  • Pokud vaše aplikace musí převést velké množství dat, měli byste znovu použít výstupní vyrovnávací paměť. V tomto případě je nejlepší volbou verze, GetBytes která podporuje pole bajtů.

  • Zvažte použití Encoder.Convert metody místo GetByteCount. Metoda převodu převede co nejvíce dat a vyvolá výjimku, pokud je výstupní vyrovnávací paměť příliš malá. Pro průběžné kódování datového proudu je tato metoda často nejlepší volbou.

Viz také

Platí pro