UnicodeEncoding.GetByteCount メソッド

定義

文字のセットをエンコードすることによって生成されるバイト数を計算します。

オーバーロード

GetByteCount(String)

指定した文字列内の文字をエンコードすることによって生成されるバイト数を計算します。

GetByteCount(Char*, Int32)

指定した文字ポインターで始まる文字のセットをエンコードすることによって生成されるバイト数を計算します。

GetByteCount(Char[], Int32, Int32)

指定した文字配列から文字のセットをエンコードすることによって生成されるバイト数を計算します。

GetByteCount(String)

指定した文字列内の文字をエンコードすることによって生成されるバイト数を計算します。

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

パラメーター

s
String

エンコード対象の文字のセットを格納する文字列。

戻り値

Int32

指定した文字をエンコードすることによって生成されるバイト数。

例外

snullです。

結果のバイト数が、整数として返すことのできる最大数を超えています。

エラーの検出が有効になり、s に無効な文字のシーケンスが含まれています。

フォールバックが発生しました (詳細については「.NET での文字エンコード」を参照) および EncoderFallbackEncoderExceptionFallback に設定されます。

次の例では、 メソッドと メソッドを呼び出して、文字列のエンコードに必要な最大バイト数と実際のバイト GetMaxByteCount GetByteCount(String) 数を計算します。 また、バイト 順マーク付きバイト ストリームを格納するために必要な実際のバイト数も表示されます。

using System;
using System.Text;

class UTF8EncodingExample {
    public static void Main() {
        String chars = "UTF-16 Encoding Example";
        Encoding unicode = Encoding.Unicode;

        Console.WriteLine("Bytes needed to encode '{0}':", chars);
        Console.WriteLine("   Maximum:         {0}",
                          unicode.GetMaxByteCount(chars.Length));
        Console.WriteLine("   Actual:          {0}",
                          unicode.GetByteCount(chars));
        Console.WriteLine("   Actual with BOM: {0}",
                          unicode.GetByteCount(chars) + unicode.GetPreamble().Length);
    }
}
// The example displays the following output:
//       Bytes needed to encode 'UTF-16 Encoding Example':
//          Maximum:         48
//          Actual:          46
//          Actual with BOM: 48
Imports System.Text

Module Example
    Public Sub Main()
        Dim chars As String = "UTF-16 Encoding Example"
        Dim unicode As Encoding = Encoding.Unicode

        Console.WriteLine("Bytes needed to encode '{0}':", chars)
        Console.WriteLine("   Maximum:         {0}",
                          unicode.GetMaxByteCount(chars.Length))
        Console.WriteLine("   Actual:          {0}",
                          unicode.GetByteCount(chars))
        Console.WriteLine("   Actual with BOM: {0}",
                          unicode.GetByteCount(chars) + unicode.GetPreamble().Length)
    End Sub
End Module
' The example displays the following output:
'       Bytes needed to encode 'UTF-16 Encoding Example':
'          Maximum:         48
'          Actual:          46
'          Actual with BOM: 48

注釈

結果のバイトを格納するために で必要な正確な配列サイズ GetBytes を計算するには、 メソッドを呼び出 GetByteCount します。 配列の最大サイズを計算するには、 メソッドを呼び出 GetMaxByteCount します。 メソッド GetByteCount は通常、割り当てるメモリが少ないのに対し、通常は高速 GetMaxByteCount に実行されます。

エラー検出では、無効なシーケンスにより、このメソッドは をスローします ArgumentException 。 エラー検出を行わずに、無効なシーケンスは無視され、例外はスローされません。

重要

エンコードされたバイトがファイルまたはストリームとして保存されている場合に、エンコードされたバイトが正しくデコードされていることを確認するには、エンコードされたバイトのストリームの前にプリアンブルを付けすることができます。 バイト ストリームの先頭にプリアンブルを挿入する (ファイルに書き込まれる一連のバイトの先頭など) は開発者の責任であり、プリアンブル内のバイト数は メソッドによって返される値に反映されません。 GetByteCount(String)

こちらもご覧ください

適用対象

GetByteCount(Char*, Int32)

重要

この API は CLS 準拠ではありません。

指定した文字ポインターで始まる文字のセットをエンコードすることによって生成されるバイト数を計算します。

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

パラメーター

chars
Char*

エンコードする最初の文字へのポインター。

count
Int32

エンコードする文字数。

戻り値

Int32

指定した文字をエンコードすることによって生成されるバイト数。

属性

例外

charsnullです。

count が 0 未満です。

または 結果のバイト数が、整数として返すことのできる最大数を超えています。

エラー検出が有効であり、chars に無効な文字シーケンスが含まれています。

フォールバックが発生しました (詳細については「.NET での文字エンコード」を参照) および EncoderFallbackEncoderExceptionFallback に設定されます。

注釈

結果のバイトを格納するために必要な GetBytes 正確な配列サイズを計算するには、 メソッドを呼び出 GetByteCount します。 配列の最大サイズを計算するには、 メソッドを呼び出 GetMaxByteCount します。 メソッド GetByteCount は通常、割り当てるメモリが少ないのに対し、通常は高速 GetMaxByteCount に実行されます。

エラー検出では、無効なシーケンスにより、このメソッドは をスローします ArgumentException 。 エラー検出を行わずに、無効なシーケンスは無視され、例外はスローされません。

重要

エンコードされたバイトがファイルまたはストリームとして保存されている場合に、エンコードされたバイトが正しくデコードされていることを確認するには、エンコードされたバイトのストリームの前にプリアンブルを付けすることができます。 バイト ストリームの先頭にプリアンブルを挿入する (ファイルに書き込まれる一連のバイトの先頭など) は開発者の責任であり、プリアンブル内のバイト数は メソッドによって返される値に反映されません。 GetByteCount

こちらもご覧ください

適用対象

GetByteCount(Char[], Int32, Int32)

指定した文字配列から文字のセットをエンコードすることによって生成されるバイト数を計算します。

public:
 override int GetByteCount(cli::array <char> ^ chars, int index, int count);
public override int GetByteCount (char[] chars, int index, int count);
override this.GetByteCount : char[] * int * int -> int
Public Overrides Function GetByteCount (chars As Char(), index As Integer, count As Integer) As Integer

パラメーター

chars
Char[]

エンコード対象の文字のセットを格納している文字配列。

index
Int32

エンコードする最初の文字のインデックス。

count
Int32

エンコードする文字数。

戻り値

Int32

指定した文字をエンコードすることによって生成されるバイト数。

例外

charsnull (Nothing) です。

index または count が 0 未満です。

または index および countcharsにおいて有効な範囲を表していません。

または 結果のバイト数が、整数として返すことのできる最大数を超えています。

エラーの検出が有効になり、chars に無効な文字のシーケンスが含まれています。

フォールバックが発生しました (詳細については「.NET での文字エンコード」を参照) および EncoderFallbackEncoderExceptionFallback に設定されます。

次の例では、配列にラテン文字の大文字と小文字を設定し、 メソッドを呼び出して、ラテン小文字をエンコードするために必要なバイト数 GetByteCount(Char[], Int32, Int32) を決定します。 次に、この情報と、バイト順マークが追加された場合に必要な合計バイト数が表示されます。 この数値を、 メソッドによって返される値と比較します。これは、ラテン小文字をエンコードするために必要な最大バイト GetMaxByteCount 数を示します。 次の例では、ギリシャ文字とキリル文字の組み合わせを配列に設定し、 メソッドを呼び出して、キリル文字をエンコードするために必要なバイト数 GetByteCount(Char[], Int32, Int32) を決定します。 次に、この情報と、バイト順マークが追加された場合に必要な合計バイト数が表示されます。 この数値を、 メソッドによって返される値と比較します。これは、キリル文字をエンコードするために必要な最大バイト数 GetMaxByteCount を示します。

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      int uppercaseStart = 0x0041;
      int uppercaseEnd = 0x005a;
      int lowercaseStart = 0x0061;
      int lowercaseEnd = 0x007a;
      // Instantiate a UTF8 encoding object with BOM support.
      Encoding unicode = Encoding.Unicode;

      // Populate array with characters.
      char[] chars = new char[lowercaseEnd - lowercaseStart + uppercaseEnd - uppercaseStart + 2];
      int index = 0;
      for (int ctr = uppercaseStart; ctr <= uppercaseEnd; ctr++) {
         chars[index] = (char)ctr;
         index++;
      }
      for (int ctr = lowercaseStart; ctr <= lowercaseEnd; ctr++) {
         chars[index] = (char)ctr;
         index++;
      }

      // Display the bytes needed for the lowercase characters.
      Console.WriteLine("Bytes needed for lowercase Latin characters:");
      Console.WriteLine("   Maximum:         {0,5:N0}",
                        unicode.GetMaxByteCount(lowercaseEnd - lowercaseStart + 1));
      Console.WriteLine("   Actual:          {0,5:N0}",
                        unicode.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
                                          lowercaseEnd - lowercaseStart + 1));
      Console.WriteLine("   Actual with BOM: {0,5:N0}",
                        unicode.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
                                          lowercaseEnd - lowercaseStart + 1) +
                                          unicode.GetPreamble().Length);
   }
}
// The example displays the following output:
//       Bytes needed for lowercase Latin characters:
//          Maximum:            54
//          Actual:             52
//          Actual with BOM:    54
Imports System.Text

Module Example
   Public Sub Main()
      Dim uppercaseStart As Integer = &h0041
      Dim uppercaseEnd As Integer = &h005a
      Dim lowercaseStart As Integer = &h0061
      Dim lowercaseEnd As Integer = &h007a
      ' Instantiate a UTF8 encoding object with BOM support.
      Dim unicode As Encoding = Encoding.Unicode
      
      ' Populate array with characters.
      Dim chars(lowercaseEnd - lowercaseStart + uppercaseEnd - uppercaseStart + 1) As Char
      Dim index As Integer = 0
      For ctr As Integer = uppercaseStart To uppercaseEnd
         chars(index) = ChrW(ctr)
         index += 1
      Next
      For ctr As Integer = lowercaseStart To lowercaseEnd
         chars(index) = ChrW(ctr)
         index += 1
      Next

      ' Display the bytes needed for the lowercase characters.
        Console.WriteLine("Bytes needed for lowercase Latin characters:")
        Console.WriteLine("   Maximum:         {0,5:N0}",
                          unicode.GetMaxByteCount(lowercaseEnd - lowercaseStart + 1))
        Console.WriteLine("   Actual:          {0,5:N0}",
                          unicode.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
                                            lowercaseEnd - lowercaseStart + 1))
        Console.WriteLine("   Actual with BOM: {0,5:N0}",
                          unicode.GetByteCount(chars, uppercaseEnd - uppercaseStart + 1,
                                            lowercaseEnd - lowercaseStart + 1) +
                                            unicode.GetPreamble().Length)
   End Sub
End Module
' The example displays the following output:
'       Bytes needed for lowercase Latin characters:
'          Maximum:            54
'          Actual:             52
'          Actual with BOM:    54

注釈

結果のバイトを格納するために で必要な正確な配列サイズを計算するために、 GetBytes アプリケーションでは を使用します GetByteCount 。 配列の最大サイズを計算するには、 メソッドを呼び出 GetMaxByteCount します。 メソッド GetByteCount は通常、割り当てるメモリが少ないのに対し、通常は高速 GetMaxByteCount に実行されます。

エラー検出を有効にすると、無効なシーケンスにより、このメソッドは をスローします ArgumentException 。 エラー検出を行わずに、無効なシーケンスは無視され、例外はスローされません。

エンコードされたバイトがファイルまたはストリームとして保存されている場合に、エンコードされたバイトが正しくデコードされていることを確認するには、エンコードされたバイトのストリームの前にプリアンブルを付けすることができます。 バイト ストリームの先頭にプリアンブルを挿入する (ファイルに書き込まれる一連のバイトの先頭など) は開発者の責任であり、プリアンブル内のバイト数は メソッドによって返される値に反映されません。 GetByteCount(Char[], Int32, Int32)

こちらもご覧ください

適用対象