다음을 통해 공유


UnicodeEncoding 클래스

유니코드 문자의 UTF-16 인코딩을 나타냅니다.

네임스페이스: System.Text
어셈블리: mscorlib(mscorlib.dll)

구문

‘선언
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class UnicodeEncoding
    Inherits Encoding
‘사용 방법
Dim instance As UnicodeEncoding
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public class UnicodeEncoding : Encoding
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public ref class UnicodeEncoding : public Encoding
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public class UnicodeEncoding extends Encoding
SerializableAttribute 
ComVisibleAttribute(true) 
public class UnicodeEncoding extends Encoding

설명

인코딩은 유니코드 문자 집합을 바이트 시퀀스로 변환하는 프로세스이며, 디코딩은 그 반대로, 인코딩된 바이트 시퀀스를 유니코드 문자 집합으로 변환하는 프로세스입니다.

유니코드 표준에서는 지원되는 모든 스크립트의 각 문자에 코드 포인트(숫자)를 할당합니다. UTF(유니코드 변환 형식)는 코드 포인트를 인코딩하는 한 가지 방법입니다. 유니코드 표준 버전 3.2에서는 다음 UTF를 사용합니다.

  • UTF-8. 각 코드 포인트를 1~4바이트의 시퀀스로 나타냅니다.

  • UTF-16. 각 코드 포인트를 1~2개의 16비트 정수 시퀀스로 나타냅니다.

  • UTF-32. 각 코드 포인트를 32비트 정수로 나타냅니다.

GetByteCount 메서드는 유니코드 문자 집합을 인코딩한 결과의 바이트 수를 결정하며 GetBytes 메서드는 실제 인코딩을 수행합니다.

마찬가지로 GetCharCount 메서드는 디코딩될 바이트 시퀀스의 문자 수를 결정하며, GetCharsGetString 메서드는 실제 디코딩을 수행합니다.

인코더에서는 big-endian 바이트 순서(최상위 바이트 먼저) 또는 little-endian 바이트 순서(최하위 바이트 먼저)를 사용할 수 있습니다. 예를 들어, 라틴 대문자 A(코드 포인트 U+0041)는 다음과 같이 serialize됩니다(16진수).

  • Big-endian 바이트 순서: 00 41

  • Little-endian 바이트 순서: 41 00

선택적으로 UnicodeEncoding은 인코딩 프로세스의 결과로 생성되는 바이트 시퀀스의 맨 앞에 추가할 수 있는 바이트 배열인 프리앰블을 제공합니다. 프리앰블에 바이트 순서 표시(코드 포인트 U+FEFF)가 있으면 디코더에서 바이트 순서와 변환 형식 또는 UTF를 결정하는 데 도움이 됩니다. 유니코드 바이트 순서 표시가 다음과 같이 16진수로 serialize됩니다.

  • Big-endian 바이트 순서: FE FF

  • Little-endian 바이트 순서: FF FE

일반적으로 네이티브 바이트 순서를 사용하여 유니코드 문자를 저장하는 것이 보다 효과적입니다. 예를 들어, little-endian 플랫폼(예: Intel 컴퓨터)에서는 little-endian 바이트 순서를 사용하는 것이 좋습니다.

GetPreamble 메서드는 바이트 순서 표시가 포함된 바이트 배열을 반환합니다. 인코딩된 스트림 앞에 바이트 배열이 있으면 디코더에서 사용된 인코딩 형식을 식별하는 데 도움이 됩니다.

유니코드 인코딩, 바이트 순서 및 바이트 순서 표시에 대한 자세한 내용은 www.unicode.org에 있는 The Unicode Standard를 참조하십시오.

참고

오류 검색이 가능하도록 설정하고 클래스 인스턴스를 더 안전하게 만들려면 throwOnInvalidBytes 매개 변수를 사용하는 UnicodeEncoding 생성자를 사용하고 해당 매개 변수를 true로 설정합니다. 오류 검색을 사용하면 잘못된 문자 시퀀스나 바이트 시퀀스를 검색하는 메서드가 ArgumentException을 throw합니다. 오류 검색을 사용하지 않으면 예외가 throw되지 않고 일반적으로 잘못된 시퀀스가 무시됩니다.

UnicodeEncoding은 Windows 코드 페이지 1200(little-endian 바이트 순서) 및 1201(big-endian 바이트 순서)에 해당합니다.

예제

다음 코드 예제에서는 UnicodeEncoding을 사용하여 유니코드 문자열을 바이트 배열로 인코딩하는 방법을 보여 줍니다. 바이트 배열은 다시 문자열로 디코딩되어 데이터의 손실이 없음을 보여 줍니다.

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
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);
    }
}
using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
   
   // The encoding.
   UnicodeEncoding^ unicode = gcnew UnicodeEncoding;
   
   // Create a String* that contains Unicode characters.
   String^ unicodeString = L"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*.
   array<Byte>^encodedBytes = unicode->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 = unicode->GetString( encodedBytes );
   Console::WriteLine();
   Console::WriteLine( "Decoded bytes:" );
   Console::WriteLine( decodedString );
}
import System.*;
import System.Text.*;

class UnicodeEncodingExample
{
    public static void main(String[] args)
    {
        // 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.
        ubyte encodedBytes[] = unicode.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 = unicode.GetString(encodedBytes);
        Console.WriteLine();
        Console.WriteLine("Decoded bytes:");
        Console.WriteLine(decodedString);
    } //main
} //UnicodeEncodingExample

상속 계층 구조

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

스레드로부터의 안전성

이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

플랫폼

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에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0, 1.0에서 지원

참고 항목

참조

UnicodeEncoding 멤버
System.Text 네임스페이스
Encoding 클래스
Encoder 클래스
Decoder 클래스
UTF32Encoding
UTF8Encoding
UTF7Encoding
ASCIIEncoding 클래스
System.Globalization.UnicodeCategory
System.Globalization.CharUnicodeInfo