UTF8Encoding.GetString(Byte[], Int32, Int32) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
バイト配列に格納されているある範囲のバイトを文字列にデコードします。
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。
- 属性
例外
bytes
が null
です。
index
または count
が 0 未満です。
または
index
および count
は bytes
において有効な範囲を表していません。
エラーの検出が有効になり、bytes
に無効なバイト シーケンスが含まれています。
例
次の例では、 メソッドを呼び出 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 呼び出します。
ストリームから読み取られたデータなど、変換するデータは、シーケンシャル ブロックでのみ使用できます。 この場合、またはデータの量が大きくて小さいブロックに分割する必要がある場合は、 メソッドまたは メソッドによって提供される GetDecoder または EncoderGetEncoder をそれぞれ使用Decoderします。
適用対象
こちらもご覧ください
.NET