Encoding.GetByteCount 方法

定義

在衍生類別中覆寫時,計算編碼一組字元所產生的位元組數目。

多載

GetByteCount(Char[], Int32, Int32)

在衍生類別中覆寫時,計算從指定的字元陣列編碼一組字元所產生的位元組數目。

GetByteCount(String, Int32, Int32)

在衍生類別中覆寫時,計算藉由從指定的字串編碼一組字元所產生的位元組數。

GetByteCount(Char*, Int32)

在衍生類別中覆寫時,計算從指定的字元指標開始,編碼一組字元所產生的位元組數目。

GetByteCount(ReadOnlySpan<Char>)

在衍生類別中覆寫時,計算藉由編碼指定字元範圍中字元所產生的位元組數。

GetByteCount(Char[])

在衍生類別中覆寫時,計算編碼指定字元陣列中所有字元所產生的位元組數目。

GetByteCount(String)

在衍生類別中覆寫時,計算編碼指定的字串字元所產生的位元組數目。

GetByteCount(Char[], Int32, Int32)

來源:
Encoding.cs
來源:
Encoding.cs
來源:
Encoding.cs

在衍生類別中覆寫時,計算從指定的字元陣列編碼一組字元所產生的位元組數目。

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

參數

chars
Char[]

包含要解碼之一組字元的字元陣列。

index
Int32

要編碼的第一個字元索引。

count
Int32

要編碼的字元數。

傳回

編碼指定字元所產生的位元組數。

例外狀況

charsnull

indexcount 小於零。

-或-

indexcount 不代表 chars 中有效的範圍。

發生後援 (如需詳細資訊,請參閱 .NET 中的字元編碼)

-和-

EncoderFallback 設定為 EncoderExceptionFallback

範例

下列範例會決定從字元數位編碼三個字元所需的位元組數目、編碼字元,以及顯示產生的位元組。

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

*/

備註

若要計算儲存結果位元組所需的 GetBytes 確切數位大小,請呼叫 GetByteCount 方法。 若要計算數位大小上限,請呼叫 GetMaxByteCount 方法。 方法 GetByteCount 通常允許配置較少的記憶體,而 GetMaxByteCount 方法通常執行速度較快。

方法 GetByteCount 會決定編碼一組 Unicode 字元所產生的位元組數目,而方法會 GetBytes 執行實際的編碼。 方法 GetBytes 預期會進行離散轉換,與方法相反 Encoder.GetBytes ,此方法會處理單一輸入數據流上的多個轉換。

支持數個和 GetByteCountGetBytes 版本。 以下是使用這些方法的一些程式設計考慮:

  • 您的應用程式可能需要將許多輸入字元編碼為代碼頁,並使用多個呼叫來處理字元。 在此情況下,您可能需要在呼叫之間維護狀態,並考慮所使用物件所保存 Encoder 的狀態。

  • 如果您的應用程式處理字串輸入,建議使用的 GetBytes 字串版本。

  • 的 Unicode 字元緩衝區版本 GetBytes(Char*, Int32, Byte*, Int32) 允許一些快速的技術,特別是使用 Encoder 物件或插入現有緩衝區的多個呼叫。 不過,請記住,此方法版本有時不安全,因為需要指標。

  • 如果您的應用程式必須轉換大量數據,它應該重複使用輸出緩衝區。 在此情況下, GetBytes 支援位元組陣組的版本是最佳選擇。

  • 請考慮使用 Encoder.Convert 方法,而不是 GetByteCount。 轉換方法會盡可能轉換數據,而且如果輸出緩衝區太小,則會擲回例外狀況。 對於數據流的連續編碼,此方法通常是最佳選擇。

另請參閱

適用於

.NET 9 及其他版本
產品 版本
.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)

來源:
Encoding.cs
來源:
Encoding.cs
來源:
Encoding.cs

在衍生類別中覆寫時,計算藉由從指定的字串編碼一組字元所產生的位元組數。

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

參數

s
String

字串,包含要編碼的一組字元。

index
Int32

要編碼的第一個字元索引。

count
Int32

要編碼的字元數。

傳回

編碼字串所產生的位元組數。

範例

下列範例會決定從字元數位編碼三個字元所需的位元組數目、編碼字元,以及顯示產生的位元組。

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

*/

備註

若要計算儲存結果位元組所需的 GetBytes 確切數位大小,請呼叫 GetByteCount 方法。 若要計算數位大小上限,請呼叫 GetMaxByteCount 方法。 方法 GetByteCount 通常允許配置較少的記憶體,而 GetMaxByteCount 方法通常執行速度較快。

方法 GetByteCount 會決定編碼一組 Unicode 字元所產生的位元組數目,而方法會 GetBytes 執行實際的編碼。 方法 GetBytes 預期會進行離散轉換,與方法相反 Encoder.GetBytes ,此方法會處理單一輸入數據流上的多個轉換。

支持數個和 GetByteCountGetBytes 版本。 以下是使用這些方法的一些程式設計考慮:

  • 您的應用程式可能需要將許多輸入字元編碼為代碼頁,並使用多個呼叫來處理字元。 在此情況下,您可能需要在呼叫之間維護狀態,並考慮所使用物件所保存 Encoder 的狀態。

  • 如果您的應用程式處理字串輸入,建議使用的 GetBytes 字串版本。

  • 的 Unicode 字元緩衝區版本 GetBytes(Char*, Int32, Byte*, Int32) 允許一些快速的技術,特別是使用 Encoder 物件或插入現有緩衝區的多個呼叫。 不過,請記住,此方法版本有時不安全,因為需要指標。

  • 如果您的應用程式必須轉換大量數據,它應該重複使用輸出緩衝區。 在此情況下, GetBytes 支援位元組陣組的版本是最佳選擇。

  • 請考慮使用 Encoder.Convert 方法,而不是 GetByteCount。 轉換方法會盡可能轉換數據,而且如果輸出緩衝區太小,則會擲回例外狀況。 對於數據流的連續編碼,此方法通常是最佳選擇。

適用於

.NET 9 及其他版本
產品 版本
.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)

來源:
Encoding.cs
來源:
Encoding.cs
來源:
Encoding.cs

重要

此 API 不符合 CLS 規範。

在衍生類別中覆寫時,計算從指定的字元指標開始,編碼一組字元所產生的位元組數目。

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

參數

chars
Char*

要編碼的第一個字元指標。

count
Int32

要編碼的字元數。

傳回

編碼指定字元所產生的位元組數。

屬性

例外狀況

charsnull

count 小於零。

發生後援 (如需詳細資訊,請參閱 .NET 中的字元編碼)

-和-

EncoderFallback 設定為 EncoderExceptionFallback

備註

若要計算儲存所產生位元組所需的確切數組大小 GetBytes ,您應該呼叫 GetByteCount 方法。 若要計算數位大小上限,請呼叫 GetMaxByteCount 方法。 方法 GetByteCount 通常允許配置較少的記憶體,而 GetMaxByteCount 方法通常執行速度較快。

方法 GetByteCount(Char*, Int32) 會決定編碼一組 Unicode 字元所產生的位元組數目,而方法會 GetBytes(Char*, Int32, Byte*, Int32) 執行實際的編碼。 方法 GetBytes 預期會進行離散轉換,與方法相反 Encoder.GetBytes ,此方法會處理單一輸入數據流上的多個轉換。

支持數個和 GetByteCountGetBytes 版本。 以下是使用這些方法的一些考慮:

  • 您的應用程式可能需要將許多輸入字元編碼為代碼頁,並使用多個呼叫來處理字元。 在此情況下,您可能需要在呼叫之間維護狀態,並考慮所使用物件所保存 Encoder 的狀態。

  • 如果您的應用程式處理字串輸入,您應該使用 方法的 GetBytes 字串版本。

  • 的 Unicode 字元緩衝區版本 GetBytes 允許一些快速的技術,特別是使用 Encoder 物件或插入現有緩衝區的多個呼叫。 不過,請記住,此方法版本有時不安全,因為需要指標。

  • 如果您的應用程式必須轉換大量數據,它應該重複使用輸出緩衝區。 在此情況下, GetBytes 支援位元組陣組的版本是最佳選擇。

  • 請考慮使用 Encoder.Convert 方法,而不是 GetByteCount。 轉換方法會盡可能轉換數據,而且如果輸出緩衝區太小,則會擲回例外狀況。 對於數據流的連續編碼,此方法通常是最佳選擇。

另請參閱

適用於

.NET 9 及其他版本
產品 版本
.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>)

來源:
Encoding.cs
來源:
Encoding.cs
來源:
Encoding.cs

在衍生類別中覆寫時,計算藉由編碼指定字元範圍中字元所產生的位元組數。

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

參數

chars
ReadOnlySpan<Char>

要編碼的字元範圍。

傳回

編碼指定字元範圍所產生的位元組數目。

備註

若要計算儲存結果位元組所需的 GetBytes 確切範圍大小,請呼叫 GetByteCount 方法。 若要計算最大範圍大小,請呼叫 GetMaxByteCount 方法。 方法 GetByteCount 通常允許配置較少的記憶體,而 GetMaxByteCount 方法通常執行速度較快。

方法 GetByteCount 會決定編碼一組 Unicode 字元所產生的位元組數目,而方法會 GetBytes 執行實際的編碼。 方法 GetBytes 預期會進行離散轉換,與方法相反 Encoder.GetBytes ,此方法會處理單一輸入數據流上的多個轉換。

支持數個和 GetByteCountGetBytes 版本。 以下是使用這些方法的一些程式設計考慮:

  • 您的應用程式可能需要將許多輸入字元編碼為代碼頁,並使用多個呼叫來處理字元。 在此情況下,您可能需要在呼叫之間維護狀態,並考慮所使用物件所保存 Encoder 的狀態。

  • 如果您的應用程式處理字元輸入的範圍,建議使用 的範圍版本 GetBytes

  • 請考慮使用 Encoder.Convert 方法,而不是 GetByteCount。 轉換方法會儘可能轉換數據,而且如果輸出範圍緩衝區太小,就會擲回例外狀況。 對於數據流的連續編碼,此方法通常是最佳選擇。

適用於

.NET 9 及其他版本
產品 版本
.NET Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

GetByteCount(Char[])

來源:
Encoding.cs
來源:
Encoding.cs
來源:
Encoding.cs

在衍生類別中覆寫時,計算編碼指定字元陣列中所有字元所產生的位元組數目。

public virtual int GetByteCount (char[] chars);

參數

chars
Char[]

字元陣列,包含要編碼的字元。

傳回

編碼指定字元陣列中所有字元所產生的位元組數目。

例外狀況

charsnull

發生後援 (如需詳細資訊,請參閱 .NET 中的字元編碼)

-和-

EncoderFallback 設定為 EncoderExceptionFallback

範例

下列範例會決定編碼字元數位所需的位元組數目、編碼字元,以及顯示產生的位元組。

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

*/

備註

若要計算儲存結果位元組所需的 GetBytes 確切數位大小,請呼叫 GetByteCount 方法。 若要計算數位大小上限,請呼叫 GetMaxByteCount 方法。 方法 GetByteCount 通常允許配置較少的記憶體,而 GetMaxByteCount 方法通常執行速度較快。

方法 GetByteCount 會決定編碼一組 Unicode 字元所產生的位元組數目,而方法會 GetBytes 執行實際的編碼。 方法 GetBytes 預期會進行離散轉換,與方法相反 Encoder.GetBytes ,此方法會處理單一輸入數據流上的多個轉換。

支持數個和 GetByteCountGetBytes 版本。 以下是使用這些方法的一些程式設計考慮:

  • 您的應用程式可能需要將許多輸入字元編碼為代碼頁,並使用多個呼叫來處理字元。 在此情況下,您可能需要在呼叫之間維護狀態,並考慮所使用物件所保存 Encoder 的狀態。

  • 如果您的應用程式處理字串輸入,您應該使用 方法的 GetBytes 字串版本。

  • 的 Unicode 字元緩衝區版本 GetBytes(Char*, Int32, Byte*, Int32) 允許一些快速的技術,特別是使用 Encoder 物件或插入現有緩衝區的多個呼叫。 不過,請記住,此方法版本有時不安全,因為需要指標。

  • 如果您的應用程式必須轉換大量資料,您應該重複使用輸出緩衝區。 在此情況下, GetBytes 支援位元組陣組的版本是最佳選擇。

  • 請考慮使用 Encoder.Convert 方法,而不是 GetByteCount。 轉換方法會盡可能轉換數據,而且如果輸出緩衝區太小,則會擲回例外狀況。 對於數據流的連續編碼,此方法通常是最佳選擇。

另請參閱

適用於

.NET 9 及其他版本
產品 版本
.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)

來源:
Encoding.cs
來源:
Encoding.cs
來源:
Encoding.cs

在衍生類別中覆寫時,計算編碼指定的字串字元所產生的位元組數目。

public virtual int GetByteCount (string s);

參數

s
String

字串,包含要編碼的一組字元。

傳回

編碼指定字元所產生的位元組數。

例外狀況

snull

發生後援 (如需詳細資訊,請參閱 .NET 中的字元編碼)

-和-

EncoderFallback 設定為 EncoderExceptionFallback

範例

下列範例會決定編碼字串或字串範圍所需的位元組數目、編碼字元,以及顯示產生的位元組。

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

*/

備註

若要計算儲存結果位元組所需的 GetBytes 確切數位大小,請呼叫 GetByteCount 方法。 若要計算數位大小上限,請呼叫 GetMaxByteCount 方法。 方法 GetByteCount 通常允許配置較少的記憶體,而 GetMaxByteCount 方法通常執行速度較快。

方法 GetByteCount 會決定編碼一組 Unicode 字元所產生的位元組數目,而方法會 GetBytes 執行實際的編碼。 方法 GetBytes 預期會進行離散轉換,與方法相反 Encoder.GetBytes ,此方法會處理單一輸入數據流上的多個轉換。

支持數個和 GetByteCountGetBytes 版本。 以下是使用這些方法的一些程式設計考慮:

  • 您的應用程式可能需要將許多輸入字元編碼為代碼頁,並使用多個呼叫來處理字元。 在此情況下,您可能需要在呼叫之間維護狀態,並考慮所使用物件所保存 Encoder 的狀態。

  • 如果您的應用程式處理字串輸入,建議使用的 GetBytes 字串版本。

  • 的 Unicode 字元緩衝區版本 GetBytes(Char*, Int32, Byte*, Int32) 允許一些快速的技術,特別是使用 Encoder 物件或插入現有緩衝區的多個呼叫。 不過,請記住,此方法版本有時不安全,因為需要指標。

  • 如果您的應用程式必須轉換大量數據,它應該重複使用輸出緩衝區。 在此情況下, GetBytes 支援位元組陣組的版本是最佳選擇。

  • 請考慮使用 Encoder.Convert 方法,而不是 GetByteCount。 轉換方法會盡可能轉換數據,而且如果輸出緩衝區太小,則會擲回例外狀況。 對於數據流的連續編碼,此方法通常是最佳選擇。

另請參閱

適用於

.NET 9 及其他版本
產品 版本
.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