Encoding.GetByteCount Metoda

Definicja

Podczas zastępowania w klasie pochodnej oblicza liczbę bajtów generowanych przez kodowanie zestawu znaków.

Przeciążenia

GetByteCount(Char[], Int32, Int32)

Po zastąpieniu w klasie pochodnej oblicza liczbę bajtów generowanych przez kodowanie zestawu znaków z określonej tablicy znaków.

GetByteCount(String, Int32, Int32)

Po przesłonięciu w klasie pochodnej oblicza liczbę bajtów wygenerowanych przez kodowanie zestawu znaków z określonego ciągu.

GetByteCount(Char*, Int32)

Po zastąpieniu w klasie pochodnej oblicza liczbę bajtów generowanych przez kodowanie zestawu znaków rozpoczynających się od określonego wskaźnika znaków.

GetByteCount(ReadOnlySpan<Char>)

W przypadku przesłonięcia w klasie pochodnej oblicza liczbę bajtów generowanych przez kodowanie znaków w określonym zakresie znaków.

GetByteCount(Char[])

W przypadku przesłonięcia w klasie pochodnej oblicza liczbę bajtów wygenerowanych przez kodowanie wszystkich znaków w określonej tablicy znaków.

GetByteCount(String)

Po zastąpieniu w klasie pochodnej oblicza liczbę bajtów generowanych przez kodowanie znaków w określonym ciągu.

GetByteCount(Char[], Int32, Int32)

Źródło:
Encoding.cs
Źródło:
Encoding.cs
Źródło:
Encoding.cs

Po zastąpieniu w klasie pochodnej oblicza liczbę bajtów generowanych przez kodowanie zestawu znaków z określonej tablicy znaków.

public abstract int GetByteCount (char[] chars, int index, int count);

Parametry

chars
Char[]

Tablica znaków zawierająca zestaw znaków do kodowania.

index
Int32

Indeks pierwszego znaku do kodowania.

count
Int32

Liczba znaków do kodowania.

Zwraca

Liczba bajtów generowanych przez kodowanie określonych znaków.

Wyjątki

chars to null.

index wartość lub count jest mniejsza niż zero.

-lub-

index i count nie oznaczają prawidłowego zakresu w charselemecie .

Wystąpił rezerwowy (aby uzyskać więcej informacji, zobacz Kodowanie znaków na platformie .NET)

-I-

EncoderFallback jest ustawiona na EncoderExceptionFallbackwartość .

Przykłady

Poniższy przykład określa liczbę bajtów wymaganych do zakodowania trzech znaków z tablicy znaków, koduje znaki i wyświetla wynikowe 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

*/

Uwagi

Aby obliczyć dokładny rozmiar tablicy wymagany przez GetBytes do przechowywania wynikowych bajtów, wywołaj metodę GetByteCount . Aby obliczyć maksymalny rozmiar tablicy, wywołaj metodę GetMaxByteCount . Metoda GetByteCount zwykle zezwala na alokację mniejszej ilości pamięci, podczas gdy GetMaxByteCount metoda zwykle wykonuje się szybciej.

Metoda GetByteCount określa, ile bajtów powoduje kodowanie zestawu znaków Unicode, a GetBytes metoda wykonuje rzeczywiste kodowanie. Metoda GetBytes oczekuje dyskretnych konwersji, w przeciwieństwie do Encoder.GetBytes metody, która obsługuje wiele konwersji w jednym strumieniu wejściowym.

Obsługiwane są kilka wersji GetByteCount i GetBytes . Poniżej przedstawiono kilka zagadnień programistycznych dotyczących używania tych metod:

  • Aplikacja może wymagać zakodowania wielu znaków wejściowych do strony kodu i przetworzenia znaków przy użyciu wielu wywołań. W takim przypadku prawdopodobnie trzeba zachować stan między wywołaniami, biorąc pod uwagę stan utrwalonego Encoder przez używany obiekt.

  • Jeśli aplikacja obsługuje dane wejściowe ciągów, zalecana jest wersja GetBytes ciągu.

  • Wersja buforu GetBytes(Char*, Int32, Byte*, Int32) znaków Unicode umożliwia szybkie techniki, szczególnie w przypadku wielu wywołań przy użyciu Encoder obiektu lub wstawiania do istniejących buforów. Należy jednak pamiętać, że ta wersja metody jest czasami niebezpieczna, ponieważ wskaźniki są wymagane.

  • Jeśli aplikacja musi przekonwertować dużą ilość danych, należy ponownie użyć buforu wyjściowego. W takim przypadku GetBytes najlepszym wyborem jest wersja, która obsługuje tablice bajtów.

  • Rozważ użycie Encoder.Convert metody zamiast GetByteCountmetody . Metoda konwersji konwertuje jak najwięcej danych i zgłasza wyjątek, jeśli bufor wyjściowy jest za mały. W przypadku ciągłego kodowania strumienia ta metoda jest często najlepszym wyborem.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

GetByteCount(String, Int32, Int32)

Źródło:
Encoding.cs
Źródło:
Encoding.cs
Źródło:
Encoding.cs

Po przesłonięciu w klasie pochodnej oblicza liczbę bajtów wygenerowanych przez kodowanie zestawu znaków z określonego ciągu.

public int GetByteCount (string s, int index, int count);

Parametry

s
String

Ciąg zawierający zestaw znaków do kodowania.

index
Int32

Indeks pierwszego znaku do kodowania.

count
Int32

Liczba znaków do kodowania.

Zwraca

Liczba bajtów generowanych przez kodowanie ciągu.

Przykłady

Poniższy przykład określa liczbę bajtów wymaganych do zakodowania trzech znaków z tablicy znaków, koduje znaki i wyświetla wynikowe 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

*/

Uwagi

Aby obliczyć dokładny rozmiar tablicy wymagany przez GetBytes do przechowywania wynikowych bajtów, wywołaj metodę GetByteCount . Aby obliczyć maksymalny rozmiar tablicy, wywołaj metodę GetMaxByteCount . Metoda GetByteCount zwykle zezwala na alokację mniejszej ilości pamięci, podczas gdy GetMaxByteCount metoda zwykle wykonuje się szybciej.

Metoda GetByteCount określa, ile bajtów powoduje kodowanie zestawu znaków Unicode, a GetBytes metoda wykonuje rzeczywiste kodowanie. Metoda GetBytes oczekuje dyskretnych konwersji, w przeciwieństwie do Encoder.GetBytes metody, która obsługuje wiele konwersji w jednym strumieniu wejściowym.

Obsługiwane są kilka wersji GetByteCount i GetBytes . Poniżej przedstawiono kilka zagadnień programistycznych dotyczących używania tych metod:

  • Aplikacja może wymagać zakodowania wielu znaków wejściowych do strony kodu i przetworzenia znaków przy użyciu wielu wywołań. W takim przypadku prawdopodobnie trzeba zachować stan między wywołaniami, biorąc pod uwagę stan utrwalonego Encoder przez używany obiekt.

  • Jeśli aplikacja obsługuje dane wejściowe ciągów, zalecana jest wersja GetBytes ciągu.

  • Wersja buforu GetBytes(Char*, Int32, Byte*, Int32) znaków Unicode umożliwia szybkie techniki, szczególnie w przypadku wielu wywołań przy użyciu Encoder obiektu lub wstawiania do istniejących buforów. Należy jednak pamiętać, że ta wersja metody jest czasami niebezpieczna, ponieważ wskaźniki są wymagane.

  • Jeśli aplikacja musi przekonwertować dużą ilość danych, należy ponownie użyć buforu wyjściowego. W takim przypadku GetBytes najlepszym wyborem jest wersja, która obsługuje tablice bajtów.

  • Rozważ użycie Encoder.Convert metody zamiast GetByteCountmetody . Metoda konwersji konwertuje jak najwięcej danych i zgłasza wyjątek, jeśli bufor wyjściowy jest za mały. W przypadku ciągłego kodowania strumienia ta metoda jest często najlepszym wyborem.

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

GetByteCount(Char*, Int32)

Źródło:
Encoding.cs
Źródło:
Encoding.cs
Źródło:
Encoding.cs

Ważne

Ten interfejs API nie jest zgodny ze specyfikacją CLS.

Po zastąpieniu w klasie pochodnej oblicza liczbę bajtów generowanych przez kodowanie zestawu znaków rozpoczynających się od określonego wskaźnika znaków.

[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public virtual int GetByteCount (char* chars, int count);
[System.CLSCompliant(false)]
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);

Parametry

chars
Char*

Wskaźnik do pierwszego znaku w celu zakodowania.

count
Int32

Liczba znaków do kodowania.

Zwraca

Liczba bajtów generowanych przez kodowanie określonych znaków.

Atrybuty

Wyjątki

chars to null.

Parametr count ma wartość niższą niż zero.

Wystąpił rezerwowy (aby uzyskać więcej informacji, zobacz Kodowanie znaków na platformie .NET)

-I-

EncoderFallback jest ustawiona na EncoderExceptionFallbackwartość .

Uwagi

Aby obliczyć dokładny rozmiar tablicy, który GetBytes wymaga przechowywania wynikowych bajtów, należy wywołać metodę GetByteCount . Aby obliczyć maksymalny rozmiar tablicy, wywołaj metodę GetMaxByteCount . Metoda GetByteCount zwykle zezwala na alokację mniejszej ilości pamięci, podczas gdy GetMaxByteCount metoda zwykle wykonuje się szybciej.

Metoda GetByteCount(Char*, Int32) określa, ile bajtów powoduje kodowanie zestawu znaków Unicode, a GetBytes(Char*, Int32, Byte*, Int32) metoda wykonuje rzeczywiste kodowanie. Metoda GetBytes oczekuje dyskretnych konwersji, w przeciwieństwie do Encoder.GetBytes metody, która obsługuje wiele konwersji w jednym strumieniu wejściowym.

Obsługiwane są kilka wersji GetByteCount i GetBytes . Poniżej przedstawiono kilka zagadnień dotyczących używania następujących metod:

  • Aplikacja może wymagać zakodowania wielu znaków wejściowych do strony kodu i przetworzenia znaków przy użyciu wielu wywołań. W takim przypadku prawdopodobnie trzeba zachować stan między wywołaniami, biorąc pod uwagę stan utrwalonego Encoder przez używany obiekt.

  • Jeśli aplikacja obsługuje dane wejściowe ciągów, należy użyć wersji GetBytes ciągu metody .

  • Wersja buforu GetBytes znaków Unicode umożliwia szybkie techniki, szczególnie w przypadku wielu wywołań przy użyciu Encoder obiektu lub wstawiania do istniejących buforów. Należy jednak pamiętać, że ta wersja metody jest czasami niebezpieczna, ponieważ wskaźniki są wymagane.

  • Jeśli aplikacja musi przekonwertować dużą ilość danych, należy ponownie użyć buforu wyjściowego. W takim przypadku GetBytes najlepszym wyborem jest wersja, która obsługuje tablice bajtów.

  • Rozważ użycie Encoder.Convert metody zamiast GetByteCountmetody . Metoda konwersji konwertuje jak najwięcej danych i zgłasza wyjątek, jeśli bufor wyjściowy jest za mały. W przypadku ciągłego kodowania strumienia ta metoda jest często najlepszym wyborem.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

GetByteCount(ReadOnlySpan<Char>)

Źródło:
Encoding.cs
Źródło:
Encoding.cs
Źródło:
Encoding.cs

Podczas zastępowania w klasie pochodnej oblicza liczbę bajtów wygenerowanych przez kodowanie znaków w określonym zakresie znaków.

public virtual int GetByteCount (ReadOnlySpan<char> chars);

Parametry

chars
ReadOnlySpan<Char>

Zakres znaków do kodowania.

Zwraca

Liczba bajtów generowanych przez kodowanie określonego zakresu znaków.

Uwagi

Aby obliczyć dokładny rozmiar zakresu wymagany przez GetBytes do przechowywania wynikowych bajtów, wywołaj metodę GetByteCount . Aby obliczyć maksymalny rozmiar zakresu, wywołaj metodę GetMaxByteCount . Metoda GetByteCount zwykle zezwala na alokację mniejszej ilości pamięci, podczas gdy GetMaxByteCount metoda zwykle wykonuje się szybciej.

Metoda GetByteCount określa, ile bajtów powoduje kodowanie zestawu znaków Unicode, a GetBytes metoda wykonuje rzeczywiste kodowanie. Metoda GetBytes oczekuje dyskretnych konwersji, w przeciwieństwie do Encoder.GetBytes metody, która obsługuje wiele konwersji na jednym strumieniu wejściowym.

Obsługiwane są różne wersje GetByteCount programu i GetBytes . Poniżej przedstawiono kilka zagadnień programistycznych dotyczących używania tych metod:

  • Aplikacja może wymagać zakodowania wielu znaków wejściowych do strony kodowej i przetworzenia znaków przy użyciu wielu wywołań. W takim przypadku prawdopodobnie trzeba zachować stan między wywołaniami, biorąc pod uwagę stan, który jest utrwalany przez Encoder używany obiekt.

  • Jeśli aplikacja obsługuje zakres danych wejściowych znaków, zalecana jest wersja GetBytes zakresu.

  • Rozważ użycie Encoder.Convert metody zamiast GetByteCount. Metoda konwersji konwertuje jak najwięcej danych i zgłasza wyjątek, jeśli bufor zakresu danych wyjściowych jest zbyt mały. W przypadku ciągłego kodowania strumienia ta metoda jest często najlepszym wyborem.

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

GetByteCount(Char[])

Źródło:
Encoding.cs
Źródło:
Encoding.cs
Źródło:
Encoding.cs

Podczas zastępowania w klasie pochodnej oblicza liczbę bajtów wygenerowanych przez kodowanie wszystkich znaków w określonej tablicy znaków.

public virtual int GetByteCount (char[] chars);

Parametry

chars
Char[]

Tablica znaków zawierająca znaki do zakodowania.

Zwraca

Liczba bajtów generowanych przez kodowanie wszystkich znaków w określonej tablicy znaków.

Wyjątki

chars to null.

Wystąpił powrót (aby uzyskać więcej informacji, zobacz Kodowanie znaków na platformie .NET)

-I-

EncoderFallback parametr jest ustawiony na EncoderExceptionFallbackwartość .

Przykłady

Poniższy przykład określa liczbę bajtów wymaganych do kodowania tablicy znaków, koduje znaki i wyświetla wynikowe 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

*/

Uwagi

Aby obliczyć dokładny rozmiar tablicy wymagany przez GetBytes program do przechowywania wynikowych bajtów, wywołaj metodę GetByteCount . Aby obliczyć maksymalny rozmiar tablicy, wywołaj metodę GetMaxByteCount . Metoda GetByteCount zwykle zezwala na alokację mniejszej ilości pamięci, podczas gdy GetMaxByteCount metoda zwykle wykonuje się szybciej.

Metoda GetByteCount określa, ile bajtów powoduje kodowanie zestawu znaków Unicode, a GetBytes metoda wykonuje rzeczywiste kodowanie. Metoda GetBytes oczekuje dyskretnych konwersji, w przeciwieństwie do Encoder.GetBytes metody, która obsługuje wiele konwersji na jednym strumieniu wejściowym.

Obsługiwane są różne wersje GetByteCount programu i GetBytes . Poniżej przedstawiono kilka zagadnień programistycznych dotyczących używania tych metod:

  • Aplikacja może wymagać zakodowania wielu znaków wejściowych do strony kodowej i przetworzenia znaków przy użyciu wielu wywołań. W takim przypadku prawdopodobnie trzeba zachować stan między wywołaniami, biorąc pod uwagę stan, który jest utrwalany przez Encoder używany obiekt.

  • Jeśli aplikacja obsługuje dane wejściowe ciągów, należy użyć wersji ciągów GetBytes metody .

  • Wersja buforu GetBytes(Char*, Int32, Byte*, Int32) znaków Unicode programu umożliwia szybkie techniki, szczególnie w przypadku wielu wywołań przy użyciu Encoder obiektu lub wstawiania do istniejących buforów. Należy jednak pamiętać, że ta wersja metody jest czasami niebezpieczna, ponieważ wymagane są wskaźniki.

  • Jeśli aplikacja musi przekonwertować dużą ilość danych, należy ponownie użyć buforu wyjściowego. W takim przypadku najlepszym wyborem jest wersja obsługująca GetBytes tablice bajtów.

  • Rozważ użycie Encoder.Convert metody zamiast GetByteCount. Metoda konwersji konwertuje jak najwięcej danych i zgłasza wyjątek, jeśli bufor wyjściowy jest zbyt mały. W przypadku ciągłego kodowania strumienia ta metoda jest często najlepszym wyborem.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

GetByteCount(String)

Źródło:
Encoding.cs
Źródło:
Encoding.cs
Źródło:
Encoding.cs

Podczas zastępowania w klasie pochodnej oblicza liczbę bajtów wygenerowanych przez kodowanie znaków w określonym ciągu.

public virtual int GetByteCount (string s);

Parametry

s
String

Ciąg zawierający zestaw znaków do zakodowania.

Zwraca

Liczba bajtów generowanych przez kodowanie określonych znaków.

Wyjątki

Wystąpił powrót (aby uzyskać więcej informacji, zobacz Kodowanie znaków na platformie .NET)

-I-

EncoderFallback parametr jest ustawiony na EncoderExceptionFallbackwartość .

Przykłady

Poniższy przykład określa liczbę bajtów wymaganych do zakodowania ciągu lub zakresu w ciągu, koduje znaki i wyświetla wynikowe 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

*/

Uwagi

Aby obliczyć dokładny rozmiar tablicy wymagany przez GetBytes program do przechowywania wynikowych bajtów, wywołaj metodę GetByteCount . Aby obliczyć maksymalny rozmiar tablicy, wywołaj metodę GetMaxByteCount . Metoda GetByteCount zwykle zezwala na alokację mniejszej ilości pamięci, podczas gdy GetMaxByteCount metoda zwykle wykonuje się szybciej.

Metoda GetByteCount określa, ile bajtów powoduje kodowanie zestawu znaków Unicode, a GetBytes metoda wykonuje rzeczywiste kodowanie. Metoda GetBytes oczekuje dyskretnych konwersji, w przeciwieństwie do Encoder.GetBytes metody, która obsługuje wiele konwersji na jednym strumieniu wejściowym.

Obsługiwane są różne wersje GetByteCount programu i GetBytes . Poniżej przedstawiono kilka zagadnień programistycznych dotyczących używania tych metod:

  • Aplikacja może wymagać zakodowania wielu znaków wejściowych do strony kodowej i przetworzenia znaków przy użyciu wielu wywołań. W takim przypadku prawdopodobnie trzeba zachować stan między wywołaniami, biorąc pod uwagę stan, który jest utrwalany przez Encoder używany obiekt.

  • Jeśli aplikacja obsługuje dane wejściowe ciągów, zalecana jest wersja GetBytes ciągu.

  • Wersja buforu GetBytes(Char*, Int32, Byte*, Int32) znaków Unicode programu umożliwia szybkie techniki, szczególnie w przypadku wielu wywołań przy użyciu Encoder obiektu lub wstawiania do istniejących buforów. Należy jednak pamiętać, że ta wersja metody jest czasami niebezpieczna, ponieważ wymagane są wskaźniki.

  • Jeśli aplikacja musi przekonwertować dużą ilość danych, powinna ponownie użyć buforu wyjściowego. W takim przypadku najlepszym wyborem jest wersja obsługująca GetBytes tablice bajtów.

  • Rozważ użycie Encoder.Convert metody zamiast GetByteCount. Metoda konwersji konwertuje jak najwięcej danych i zgłasza wyjątek, jeśli bufor wyjściowy jest zbyt mały. W przypadku ciągłego kodowania strumienia ta metoda jest często najlepszym wyborem.

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0