UTF8Encoding.GetEncoder メソッド
Unicode 文字のシーケンスを UTF-8 でエンコードされたバイトのシーケンスに変換できるエンコーダを取得します。
Overrides Public Function GetEncoder() As Encoder
[C#]
public override Encoder GetEncoder();
[C++]
public: Encoder* GetEncoder();
[JScript]
public override function GetEncoder() : Encoder;
戻り値
Encoder 。
解説
Encoder.GetBytes メソッドは、 GetBytes メソッドと同様の方法で、隣接する文字ブロックを隣接するバイト ブロックに変換します。ただし、 Encoder では、ブロックにまたがる文字を正確にエンコードできるように、呼び出し間のステータス情報を維持します。
この UTF8Encoding がエラー検出がオン、つまり、throwOnInvalidBytes パラメータが true の状態で構築されると、このメソッドで返された Encoder でもエラー検出がオンになります。
GetEncoder メソッドは、ブロックの末尾で後続の文字 (上位サロゲートなど) を保持し、その後続の Unicode 文字を次のエンコーディング操作で使用する Encoder を取得します。 GetDecoder と GetEncoder は、ネットワーク伝送やファイル操作に役立ちます。これは、ネットワーク伝送やファイル操作では、完全なストリームではなくデータのブロックを処理することが多いためです。
使用例
[Visual Basic, C#, C++] chars
内の文字のシーケンスを UTF-8 でエンコードされた bytes
内のバイトのシーケンスに変換するエンコーダを、 GetEncoder メソッドを使用して取得する方法を次の例に示します。
Imports System
Imports System.Text
Imports Microsoft.VisualBasic.Strings
Class UTF8EncodingExample
Public Shared Sub Main()
'Characters:
' ChrW(97) = a
' ChrW(98) = b
' ChrW(99) = c
' ChrW(768) = `
' ChrW(41120) = valid unicode code point, but not a character
Dim chars() As Char = {ChrW(97), ChrW(98), ChrW(99), ChrW(768), ChrW(41120)}
Dim bytes() As Byte
Dim utf8Encoder As Encoder = Encoding.UTF8.GetEncoder()
Dim byteCount As Integer = utf8Encoder.GetByteCount(chars, 2, 3, True)
bytes = New Byte(byteCount - 1) {}
Dim bytesEncodedCount As Integer = utf8Encoder.GetBytes( _
chars, 2, 3, bytes, 0, True _
)
Console.WriteLine("{0} bytes used to encode characters.", bytesEncodedCount)
Console.Write("Encoded bytes: ")
Dim b As Byte
For Each b In bytes
Console.Write("[{0}]", b)
Next b
Console.WriteLine()
End Sub 'Main
End Class 'UTF8EncodingExample
[C#]
using System;
using System.Text;
class UTF8EncodingExample {
public static void Main() {
Char[] chars = new Char[] {'a', 'b', 'c', '\u0300', '\ua0a0'};
Byte[] bytes;
Encoder utf8Encoder = Encoding.UTF8.GetEncoder();
int byteCount = utf8Encoder.GetByteCount(chars, 2, 3, true);
bytes = new Byte[byteCount];
int bytesEncodedCount = utf8Encoder.GetBytes(chars, 2, 3, bytes, 0, true);
Console.WriteLine(
"{0} bytes used to encode characters.", bytesEncodedCount
);
Console.Write("Encoded bytes: ");
foreach (Byte b in bytes) {
Console.Write("[{0}]", b);
}
Console.WriteLine();
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
Char chars[] = {'a', 'b', 'c', L'\u0300', L'\ua0a0'};
Byte bytes[];
Encoder * utf8Encoder = Encoding::UTF8 -> GetEncoder();
int byteCount = utf8Encoder -> GetByteCount(chars, 2, 3, true);
bytes = new Byte[byteCount];
int bytesEncodedCount = utf8Encoder -> GetBytes(chars, 2, 3, bytes, 0, true);
Console::WriteLine(S"{0} bytes used to encode characters.", __box(bytesEncodedCount));
Console::Write(S"Encoded bytes: ");
IEnumerator* myEnum = bytes->GetEnumerator();
while (myEnum->MoveNext())
{
Byte b = *__try_cast<Byte*>(myEnum->Current);
Console::Write(S"[{0}]", __box(b));
}
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 名前空間 | GetByteCount | GetBytes