次の方法で共有


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 オブジェクト。

属性

例外

bytesnull (Nothing) です。

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

または

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

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

フォールバックが発生しました (詳細については「.NET での文字エンコード」を参照)

および

DecoderFallbackDecoderExceptionFallback に設定されます。

次の例では、 メソッドを GetByteCount 呼び出してエンコードされた文字列に必要なバイト数を正確に判断し、バイトオーダー マーク (BOM) のサイズを追加して配列を初期化します。 次に、 メソッドを GetPreamble 呼び出して BOM を配列に格納してから、 メソッドを 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 呼び出します。

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

適用対象

こちらもご覧ください