Share via


UTF8Encoding クラス

Unicode 文字の UTF-8 エンコーディングを表します。

この型のすべてのメンバの一覧については、UTF8Encoding メンバ を参照してください。

System.Object
   System.Text.Encoding
      System.Text.UTF8Encoding

<Serializable>
Public Class UTF8Encoding   Inherits Encoding
[C#]
[Serializable]
public class UTF8Encoding : Encoding
[C++]
[Serializable]
public __gc class UTF8Encoding : public Encoding
[JScript]
public
   Serializable
class UTF8Encoding extends Encoding

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

このクラスは、UTF-8 (UCS Transformation Format、8 ビット形式) を使用して Unicode 文字をエンコードします。このエンコーディングは、すべての Unicode 文字値およびサロゲートをサポートしています。サロゲート ペアの詳細については、 UnicodeCategory のトピックを参照してください。

このクラスには、バイトの配列をデコードした結果取得される Unicode 文字の数を報告する GetCharCount メソッド、および実際にバイトの配列をデコードする GetChars メソッドが含まれています。 GetByteCount メソッドは、Unicode 文字の文字列または配列をエンコードした結果取得されるバイト数を報告し、 GetBytes メソッドは、実際に文字をバイトの配列にエンコードします。

GetDecoder メソッドは、UTF-8 でエンコードされたバイトを Unicode 文字に変換 (デコード) するオブジェクトを取得し、 GetEncoder メソッドは、Unicode 文字を UTF-8 でエンコードされたバイトに変換 (エンコード) するオブジェクトを取得します。 GetPreamble メソッドは、一連のバイトの先頭に付けてそのバイトがエンコードされた方法を示す、Unicode バイト順マークを取得できます。

UTF-8 は、任意のバイト数を持つ Unicode 文字を文字単位でエンコードします。このエンコーディングは、127 の小文字の ASCII 文字に最適化されており、国際的な方法で英語をエンコードするための効率的な機構を提供します。UTF-8 識別子は、16 進数 0xFEFF の Unicode バイト順マークです。これは、UTF-8 では 16 進数 0xEF 0xBB 0xBF として表されます。バイト順マークは、UTF-8 テキストを別のエンコーディングと区別するために使用されます。

このクラスには、 throwOnInvalidBytes パラメータを取得する UTF8Encoding コンストラクタを使用して、クラスのインスタンスを構築するときにオンにできるエラー検出機能が用意されています。エラーの検出をオンにするには、 throwOnInvalidBytes を true に設定します。セキュリティ上の理由から、このコンストラクタを使用することをお勧めします。

このクラスには、 GetChars など、無効なサロゲート ペアのシーケンスをチェックするメソッドもあります。エラー検出がオンのときに、無効なシーケンスが見つかった場合は、 ArgumentException がスローされます。エラー検出がオフのときに、無効なシーケンスが見つかった場合は、例外がスローされず、そのメソッドで定義された方法で実行が継続されます。

エラー検出機能は、デコード操作中にも機能します。エラー検出がオンのときに、無効なバイト シーケンスが見つかった場合は、 ArgumentException がスローされます。無効なバイト シーケンスには、前または後ろに無効な UTF-8 バイトが存在する場合、4 バイトを超えるバイト数で構成される UTF-8 バイト シーケンスの場合、Unicode 3.0.1 で定義された形式以外の短縮形式の場合などがあります。エラー検出をオフにすると、無効なバイトが破棄されます。

このクラスは Encoding クラスから継承します。

使用例

[Visual Basic, C#, C++] UTF8Encoding を使用して Unicode 文字列をエンコードし、その結果をバイト配列 encodedBytes に格納する方法を次の例に示します。 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

[C#] 
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);
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Text;
using namespace System::Collections;

int main()
{
   // Create a UTF-8 encoding.
   UTF8Encoding* utf8 = new UTF8Encoding();

   // A Unicode string with two characters outside an 8-bit code range.
   String * unicodeString =
      S"This unicode string contains two characters with codes outside an 8-bit code range, Pi (\u03a0) and Sigma (\u03a3).";
   Console::WriteLine(S"Original string:");
   Console::WriteLine(unicodeString);

   // Encode the string.
   Byte encodedBytes[] = utf8 -> GetBytes(unicodeString);
   Console::WriteLine();
   Console::WriteLine(S"Encoded bytes:");
   IEnumerator* myEnum = encodedBytes->GetEnumerator();
   while (myEnum->MoveNext())
   {
      Byte b = *__try_cast<Byte __gc*>(myEnum->Current);
      Console::Write(S"[{0}]", __box(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(S"Decoded bytes:");
   Console::WriteLine(decodedString);
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Text

プラットフォーム: 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

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

UTF8Encoding メンバ | System.Text 名前空間 | Decoder | Encoder