UTF8Encoding.GetDecoder メソッド
UTF-8 でエンコードされたバイトのシーケンスを Unicode 文字のシーケンスに変換できるデコーダを取得します。
Overrides Public Function GetDecoder() As Decoder
[C#]
public override Decoder GetDecoder();
[C++]
public: Decoder* GetDecoder();
[JScript]
public override function GetDecoder() : Decoder;
戻り値
Decoder 。
解説
Decoder.GetChars メソッドは、 GetChars メソッドと同様の方法で、隣接するバイト ブロックを隣接する文字ブロックに変換します。ただし、 Decoder では、ブロックにまたがるバイト シーケンスを正確にデコードできるように、呼び出し間のステータス情報を維持します。
この UTF8Encoding がエラー検出がオン、つまり、throwOnInvalidBytes パラメータが true の状態で構築されると、このメソッドで返された Decoder でもエラー検出がオンになります。エラーが検出された場合、このデコーダは未定義の状態となり、再利用できません。エラー検出は、エラーの検出後に処理を中断する場合に使用します。エラーの検出後に処理を継続する場合には、エラー検出を使用しないでください。
GetDecoder メソッドは、デコードされたブロックの末尾で後続のバイトを保持し、その後続のバイトを次のデコード操作で使用する Decoder を取得します。 GetDecoder と GetEncoder は、ネットワーク伝送やファイル操作に役立ちます。これは、ネットワーク伝送やファイル操作では、完全なストリームではなくデータのブロックを処理することが多いためです。
使用例
[Visual Basic, C#, C++] GetDecoder メソッドを使用して UTF-8 デコーダを取得する方法を次の例に示します。デコーダは、 bytes
内のバイトのシーケンスを chars
内の文字のシーケンスに変換するときに使用します。
Imports System
Imports System.Text
Class UTF8EncodingExample
Public Shared Sub Main()
Dim chars() As Char
Dim bytes() As Byte = {99, 204, 128, 234, 130, 160}
Dim utf8Decoder As Decoder = Encoding.UTF8.GetDecoder()
Dim charCount As Integer = utf8Decoder.GetCharCount(bytes, 0, bytes.Length)
chars = New Char(charCount - 1) {}
Dim charsDecodedCount As Integer = utf8Decoder.GetChars( _
bytes, 0, bytes.Length, chars, 0 _
)
Console.WriteLine("{0} characters used to decode bytes.", charsDecodedCount)
Console.Write("Decoded chars: ")
Dim c As Char
For Each c In chars
Console.Write("[{0}]", c)
Next c
Console.WriteLine()
End Sub 'Main
End Class 'UTF8EncodingExample
[C#]
using System;
using System.Text;
class UTF8EncodingExample {
public static void Main() {
Char[] chars;
Byte[] bytes = new Byte[] {
99, 204, 128, 234, 130, 160
};
Decoder utf8Decoder = Encoding.UTF8.GetDecoder();
int charCount = utf8Decoder.GetCharCount(bytes, 0, bytes.Length);
chars = new Char[charCount];
int charsDecodedCount = utf8Decoder.GetChars(bytes, 0, bytes.Length, chars, 0);
Console.WriteLine(
"{0} characters used to decode bytes.", charsDecodedCount
);
Console.Write("Decoded chars: ");
foreach (Char c in chars) {
Console.Write("[{0}]", c);
}
Console.WriteLine();
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
Char chars[];
Byte bytes[] =
{
99, 204, 128, 234, 130, 160
};
Decoder * utf8Decoder = Encoding::UTF8 -> GetDecoder();
int charCount = utf8Decoder -> GetCharCount(bytes, 0, bytes -> Length);
chars = new Char[charCount];
int charsDecodedCount = utf8Decoder -> GetChars(bytes, 0, bytes -> Length, chars, 0);
Console::WriteLine(S"{0} characters used to decode bytes.", __box(charsDecodedCount));
Console::Write(S"Decoded chars: ");
IEnumerator* myEnum = chars->GetEnumerator();
while (myEnum->MoveNext())
{
Char* c = __try_cast<Char*>(myEnum->Current);
Console::Write(S"[{0}]", c -> ToString());
}
Console::WriteLine();
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard
参照
UTF8Encoding クラス | UTF8Encoding メンバ | System.Text 名前空間 | GetCharCount | GetChars