UnicodeEncoding.GetString(Byte[], Int32, Int32) メソッド

定義

バイト配列に格納されているある範囲のバイトを文字列にデコードします。

public:
 override System::String ^ GetString(cli::array <System::Byte> ^ bytes, int index, int count);
public override string GetString (byte[] bytes, int index, int count);
[System.Runtime.InteropServices.ComVisible(false)]
public override string GetString (byte[] bytes, int index, int count);
override this.GetString : byte[] * int * int -> string
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.GetString : byte[] * int * int -> string
Public Overrides Function GetString (bytes As Byte(), index As Integer, count As Integer) As String

パラメーター

bytes
Byte[]

デコード対象のバイト シーケンスが格納されたバイト配列。

index
Int32

デコードする最初のバイトのインデックス。

count
Int32

デコードするバイト数。

戻り値

String

指定したバイト シーケンスのデコード結果が格納されている String オブジェクト。

属性

例外

bytesnull (Nothing) です。

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

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

エラーの検出が有効になり、bytes に無効なバイト シーケンスが含まれています。

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

次の例では、 メソッドを呼び出して、エンコードされた文字列に必要なバイト数を正確に決定し、バイト順マーク (BOM) のサイズを追加することで、配列 GetByteCount を初期化します。 次に、エンコードされたバイトを配列に格納するメソッドを呼び出す前に、 メソッドを呼び出して、BOM を配列に格納するメソッド GetPreamble GetBytes を呼び出します。 次に、この例では メソッド GetString を呼び出して文字列をデコードします。

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      UTF8Encoding utf8 = new UTF8Encoding(true, true);

      String s = "It was the best of times, it was the worst of times...";

      // We need to dimension the array, since we'll populate it with 2 method calls.
      Byte[] bytes = new Byte[utf8.GetByteCount(s) + utf8.GetPreamble().Length];
      // Encode the string.
      Array.Copy(utf8.GetPreamble(), bytes, utf8.GetPreamble().Length);
      utf8.GetBytes(s, 0, s.Length, bytes, utf8.GetPreamble().Length);

      // Decode the byte array.
      String s2 = utf8.GetString(bytes, 0, bytes.Length);
      Console.WriteLine(s2);
   }
}
// The example displays the following output:
//        ?It was the best of times, it was the worst of times...
Imports System.Text

Module Example
   Public Sub Main()
      Dim utf8 As New UTF8Encoding(True, True)

      Dim s As String = "It was the best of times, it was the worst of times..."

      ' We need to dimension the array, since we'll populate it with 2 method calls.
      Dim bytes(utf8.GetByteCount(s) + utf8.GetPreamble().Length - 1) As Byte
      ' Encode the string.
      Array.Copy(utf8.GetPreamble(), bytes, utf8.GetPreamble().Length)
      utf8.GetBytes(s, 0, s.Length, bytes, utf8.GetPreamble().Length)

      ' Decode the byte array.
      Dim s2 As String = utf8.GetString(bytes, 0, bytes.Length)
      Console.WriteLine(s2)
   End Sub
End Module
' The example displays the following output:
'       ?It was the best of times, it was the worst of times...

この場合、デコードされた文字列は、16 ビットのバイト順マーク U+FFFD で始まるので、元の文字列とは異なることがあります。 つまり、2 つの文字列は等しくないと比較され、文字列が出力された場合、BOM は置換文字 "?" として表示されます。 文字列の先頭にある BOM を削除するには、 メソッドを呼び出 String.TrimStart します。

注釈

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

デコードするバイト範囲にバイトオーダー マーク (BOM) が含まれており、バイト配列が BOM 対応でない型のメソッドによって返された場合、このメソッドによって返される文字配列に文字 U+FFFE が含まれます。 メソッドを呼び出して削除 String.TrimStart できます。

ストリームから読み取ったデータなど、変換するデータは、シーケンシャル ブロックでのみ使用できる場合があります。 この場合、またはデータの量が非常に大きくて小さなブロックに分割する必要がある場合、アプリケーションでは、 または メソッドによって提供される オブジェクトまたは オブジェクトをそれぞれ使用する Decoder Encoder 必要があります GetDecoder GetEncoder

適用対象

こちらもご覧ください