UTF8Encoding クラス
アセンブリ: mscorlib (mscorlib.dll 内)
構文
エンコーディングは、Unicode 文字のセットをバイト シーケンスに変換するプロセスです。デコードはその逆になります。エンコードされたバイト シーケンスを Unicode 文字のセットに変換するプロセスです。
Unicode Standard では、サポートされるすべてのスクリプトについて、各文字にコード ポイント (数値) を割り当てています。コード ポイントのエンコードには UTF (Unicode Transformation Format) が使用されます。Unicode Standard バージョン 3.2 では、次の UTF が使用されています。
GetByteCount メソッドは、Unicode 文字のセットをエンコードした結果得られるバイト数を確認します。実際のエンコードは、GetBytes メソッドによって実行されます。
同様に、GetCharCount メソッドは、バイト シーケンスをデコードした結果得られる文字数を確認します。実際のデコードは、GetChars メソッドと GetString メソッドによって実行されます。
UTF8Encoding は、オプションでプリアンブルを提供します。プリアンブルは、エンコーディング プロセスで得られたバイト シーケンスの先頭に付加できるバイトの配列です。プリアンブルにバイト順マーク (コード ポイント U+FEFF) が含まれる場合、デコーダはバイト順および変換形式 (UTF) を判断できます。Unicode バイト順マークは、EF BB BF (16 進数) としてシリアル化されます。GetPreamble メソッドは、バイト順マークを格納するバイト配列を返します。
Unicode エンコーディング、バイト順、およびバイト順マークの詳細については、www.unicode.org の「Unicode Standard」を参照してください。
メモ |
---|
エラー検出を有効にしてクラス インスタンスの安全性を向上させるには、throwOnInvalidBytes パラメータを受け取る UTF8Encoding コンストラクタを使用し、このパラメータを true に設定します。エラー検出を有効にすると、メソッドは、無効な文字シーケンスやバイト シーケンスを検出したときに、ArgumentException をスローします。エラー検出を無効にすると、例外はスローされず、無効なシーケンスは全般に無視されます。 |
UTF8Encoding は、Windows コード ページ 65001 に対応しています。
メモ |
---|
オブジェクトのシリアル化と逆シリアル化を行う際に使用した .NET Framework のバージョンが異なる場合、UTF-8 でエンコードされたオブジェクトの状態は保持されません。 |
次の例は、UTF8Encoding を使用して、Unicode 文字列をエンコードし、その結果をバイト配列に格納する方法を示しています。encodedBytes を文字列にデコードしても、データの損失は発生しません。
Imports System Imports System.Text Imports Microsoft.VisualBasic.Strings Class UTF8EncodingExample Public Shared Sub Main() ' Create a UTF-8 encoding. Dim utf8 As New UTF8Encoding() ' A Unicode string with two characters outside an 8-bit code range. Dim unicodeString As String = _ "This unicode string contains two characters " & _ "with codes outside an 8-bit code range, " & _ "Pi (" & ChrW(928) & ") and Sigma (" & ChrW(931) & ")." Console.WriteLine("Original string:") Console.WriteLine(unicodeString) ' Encode the string. Dim encodedBytes As Byte() = utf8.GetBytes(unicodeString) Console.WriteLine() Console.WriteLine("Encoded bytes:") Dim b As Byte For Each b In encodedBytes Console.Write("[{0}]", b) Next b Console.WriteLine() ' Decode bytes back to string. ' Notice Pi and Sigma characters are still present. Dim decodedString As String = utf8.GetString(encodedBytes) Console.WriteLine() Console.WriteLine("Decoded bytes:") Console.WriteLine(decodedString) End Sub End Class
using System; using System.Text; class UTF8EncodingExample { public static void Main() { // Create a UTF-8 encoding. UTF8Encoding utf8 = new UTF8Encoding(); // A Unicode string with two characters outside an 8-bit code range. String unicodeString = "This unicode string contains two characters " + "with codes outside an 8-bit code range, " + "Pi (\u03a0) and Sigma (\u03a3)."; Console.WriteLine("Original string:"); Console.WriteLine(unicodeString); // Encode the string. Byte[] encodedBytes = utf8.GetBytes(unicodeString); Console.WriteLine(); Console.WriteLine("Encoded bytes:"); foreach (Byte b in encodedBytes) { Console.Write("[{0}]", b); } Console.WriteLine(); // Decode bytes back to string. // Notice Pi and Sigma characters are still present. String decodedString = utf8.GetString(encodedBytes); Console.WriteLine(); Console.WriteLine("Decoded bytes:"); Console.WriteLine(decodedString); } }
using namespace System; using namespace System::Text; using namespace System::Collections; int main() { // Create a UTF-8 encoding. UTF8Encoding^ utf8 = gcnew UTF8Encoding; // A Unicode string with two characters outside an 8-bit code range. String^ unicodeString = L"This unicode string contains two characters with codes outside an 8-bit code range, Pi (\u03a0) and Sigma (\u03a3)."; Console::WriteLine( "Original string:" ); Console::WriteLine( unicodeString ); // Encode the string. array<Byte>^encodedBytes = utf8->GetBytes( unicodeString ); Console::WriteLine(); Console::WriteLine( "Encoded bytes:" ); IEnumerator^ myEnum = encodedBytes->GetEnumerator(); while ( myEnum->MoveNext() ) { Byte b = safe_cast<Byte>(myEnum->Current); Console::Write( "[{0}]", b ); } Console::WriteLine(); // Decode bytes back to string. // Notice Pi and Sigma characters are still present. String^ decodedString = utf8->GetString( encodedBytes ); Console::WriteLine(); Console::WriteLine( "Decoded bytes:" ); Console::WriteLine( decodedString ); }
import System.*; import System.Text.*; class UTF8EncodingExample { public static void main(String[] args) { // Create a UTF-8 encoding. UTF8Encoding utf8 = new UTF8Encoding(); // A Unicode string with two characters outside an 8-bit code range. String unicodeString = "This unicode string contains two characters " + "with codes outside an 8-bit code range, " + "Pi (\u03a0) and Sigma (\u03a3)."; Console.WriteLine("Original string:"); Console.WriteLine(unicodeString); // Encode the string. ubyte encodedBytes[] = utf8.GetBytes(unicodeString); Console.WriteLine(); Console.WriteLine("Encoded bytes:"); for (int iCtr = 0; iCtr < encodedBytes.length; iCtr++) { ubyte b = encodedBytes[iCtr]; Console.Write("[{0}]", String.valueOf(b)); } Console.WriteLine(); // Decode bytes back to string. // Notice Pi and Sigma characters are still present. String decodedString = utf8.GetString(encodedBytes); Console.WriteLine(); Console.WriteLine("Decoded bytes:"); Console.WriteLine(decodedString); } //main } //UTF8EncodingExample
System.Text.Encoding
System.Text.UTF8Encoding
プラットフォーム
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
参照
- UTF8Encoding クラスのページへのリンク