次の方法で共有


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 を取得します。 GetDecoderGetEncoder は、ネットワーク伝送やファイル操作に役立ちます。これは、ネットワーク伝送やファイル操作では、完全なストリームではなくデータのブロックを処理することが多いためです。

使用例

[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