Share via


UnicodeEncoding クラス

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

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

System.Object
   System.Text.Encoding
      System.Text.UnicodeEncoding

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

スレッドセーフ

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

解説

このクラスは、UTF-16 (Unicode Transformation Format、16 ビット エンコーディング形式) で Unicode 文字をエンコードします。つまり、文字が 2 個の連続バイトで構成される 16 ビット フィールドにエンコードされます。拡張機構を使用すると、サロゲートと呼ばれるフィールドのペアを使用して、別の 2 つの20 文字をエンコードできるようになります。

エンコードされた文字の 2 個のバイトは、コンピュータ アーキテクチャに応じて、リトル エンディアンまたはビッグ エンディアンのいずれかのバイト順で格納されます。ビッグ エンディアン アーキテクチャでは、最上位バイトが最初に書き込みおよび読み取りされ、リトル エンディアン アーキテクチャでは、最下位バイトが最初に書き込みおよび読み取りされます。

UTF-16 エンコーディングでは、使用するバイト順を示すために、先頭にバイト順マーク (U+FEFF) を付けることができます。エンコーディングは、バイト順マークが 16 進数 0xFEFF の場合はビッグ エンディアン、16 進数 0xFFFE の場合はリトル エンディアンと見なされます。バイト順マークは、UTF-8 形式でエンコードされたファイルの前に付けることもできます。ただし、この場合のバイト順マークは、UTF-8 エンコーディングだけを示し、バイト順は示しません。詳細については、 UTF8Encoding クラスのトピックを参照してください。

このクラスには、コンストラクタ UnicodeEncoding が含まれます。このコンストラクタを使用して、エンコーディングがリトル エンディアンまたはビッグ エンディアンのどちらであるか、またバイト順マークを使用するかどうかを指定できます。

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

GetDecoder メソッドは、バイトをデコードするオブジェクトを取得します。 GetPreamble メソッドは、エンコードされた Unicode バイト順マークを取得できます。

Unicode の詳細については、www.unicode.org の「Unicode Standard」を参照してください。

このクラスは、 Encoding 抽象基本クラスを実装します。

使用例

[Visual Basic, C#, C++] UnicodeEncoding を使用して Unicode 文字列 unicodeString をバイト配列 encodedBytes にエンコードする方法を次の例に示します。データが損失しないことを示すため、バイト配列は文字列にデコードされます。

 
Imports System
Imports System.Text
Imports Microsoft.VisualBasic.Strings

Class UnicodeEncodingExample
    
    Public Shared Sub Main()
        ' The encoding.
        Dim uni As New UnicodeEncoding()
        
        ' Create a string that contains Unicode characters.
        Dim unicodeString As String = _
            "This Unicode string contains two characters " & _
            "with codes outside the traditional ASCII code range, " & _
            "Pi (" & ChrW(928) & ") and Sigma (" & ChrW(931) & ")."
        Console.WriteLine("Original string:")
        Console.WriteLine(unicodeString)
        
        ' Encode the string.
        Dim encodedBytes As Byte() = uni.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 = uni.GetString(encodedBytes)
        Console.WriteLine()
        Console.WriteLine("Decoded bytes:")
        Console.WriteLine(decodedString)
    End Sub
End Class

[C#] 
using System;
using System.Text;

class UnicodeEncodingExample {
    public static void Main() {
        // The encoding.
        UnicodeEncoding unicode = new UnicodeEncoding();
        
        // Create a string that contains Unicode characters.
        String unicodeString =
            "This Unicode string contains two characters " +
            "with codes outside the traditional ASCII code range, " +
            "Pi (\u03a0) and Sigma (\u03a3).";
        Console.WriteLine("Original string:");
        Console.WriteLine(unicodeString);

        // Encode the string.
        Byte[] encodedBytes = unicode.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 = unicode.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()
{
   // The encoding.
   UnicodeEncoding* unicode = new UnicodeEncoding();

   // Create a String* that contains Unicode characters.
   String * unicodeString =
      S"This Unicode string contains two characters with codes outside the traditional ASCII code range, Pi (\u03a0) and Sigma (\u03a3).";
   Console::WriteLine(S"Original string:");
   Console::WriteLine(unicodeString);

   // Encode the String*.
   Byte encodedBytes[] = unicode -> GetBytes(unicodeString);
   Console::WriteLine();
   Console::WriteLine(S"Encoded bytes:");
   IEnumerator* myEnum = encodedBytes->GetEnumerator();
   while (myEnum->MoveNext())
   {
      // Byte b = __try_cast<Byte>(myEnum->Current);
      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 = unicode -> 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 内)

参照

UnicodeEncoding メンバ | System.Text 名前空間