이 설명서는 보관되지만 유지 되지 않습니다.

Encoding 클래스

업데이트: 2007년 11월

문자 인코딩을 나타냅니다.

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

[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Encoding : ICloneable
/** @attribute SerializableAttribute */ 
/** @attribute ComVisibleAttribute(true) */
public abstract class Encoding implements ICloneable
public abstract class Encoding implements ICloneable

인코딩은 유니코드 문자 집합을 바이트 시퀀스로 변환하는 프로세스이며, 디코딩은 그 반대로, 인코딩된 바이트 시퀀스를 유니코드 문자 집합으로 변환하는 프로세스입니다. Encoding에서 지원되는 UTF(Unicode Transformation Format) 및 기타 인코딩에 대한 자세한 내용은 인코딩 이해를 참조하십시오. 유니코드 인코딩 사용을 참조하십시오.

Encoding 클래스는 바이트 배열과 같은 임의의 이진 데이터가 아니라 유니코드 문자에서 작동합니다. 응용 프로그램에서 임의의 이진 데이터를 텍스트로 인코딩해야 하는 경우 ConvertToBase64CharArray()와 같은 메서드에서 구현하는 uuencode 등의 프로토콜을 사용해야 합니다.

.NET Framework에서는 다음과 같은 Encoding 클래스 구현을 제공하여 현재 유니코드 인코딩 및 기타 인코딩을 지원합니다.

  • ASCIIEncoding은 유니코드 문자를 단일 7비트 ASCII 문자로 인코딩합니다. 이 인코딩은 U+0000에서 U+007F 사이의 문자 값만 지원합니다. 코드 페이지 20127. ASCII 속성을 통해서도 사용할 수 있습니다.

  • UTF7Encoding은 UTF-7 인코딩을 사용하여 유니코드 문자를 인코딩합니다. 이 인코딩은 모든 유니코드 문자 값을 지원합니다. 코드 페이지 65000. UTF7 속성을 통해서도 사용할 수 있습니다.

  • UTF8Encoding은 UTF-8 인코딩을 사용하여 유니코드 문자를 인코딩합니다. 이 인코딩은 모든 유니코드 문자 값을 지원합니다. 코드 페이지 65001. UTF8 속성을 통해서도 사용할 수 있습니다.

  • UnicodeEncoding은 UTF-16 인코딩을 사용하여 유니코드 문자를 인코딩합니다. little endian(코드 페이지 1200) 바이트 순서와 big endian(코드 페이지 1201) 바이트 순서를 모두 지원합니다. Unicode 속성 및 BigEndianUnicode 속성을 통해서도 사용할 수 있습니다.

  • UTF32Encoding은 UTF-32 인코딩을 사용하여 유니코드 문자를 인코딩합니다. little endian(코드 페이지 12000) 바이트 순서와 big endian(코드 페이지 12001) 바이트 순서를 모두 지원합니다. UTF32 속성을 통해서도 사용할 수 있습니다.

Encoding 클래스는 주로 여러 인코딩과 유니코드 간의 변환에 사용됩니다. 파생된 유니코드 클래스 중 하나가 응용 프로그램에 적합한 경우도 많습니다.

응용 프로그램은 GetEncoding 메서드를 사용하여 기타 인코딩을 가져옵니다. 모든 인코딩 목록을 가져오려면 GetEncodings 메서드를 사용해야 합니다.

다음 표에서는 인코딩 및 해당 인코딩 관련 코드 페이지를 보여 줍니다. 마지막 열의 별표는 내부 플랫폼에 관계없이 .NET Framework에서 해당 코드 페이지를 기본적으로 지원함을 나타냅니다.

코드 페이지

이름

표시 이름

37

IBM037

IBM EBCDIC(미국-캐나다)

437

IBM437

OEM 미국

500

IBM500

IBM EBCDIC(국제)

708

ASMO-708

아랍어(ASMO 708)

720

DOS-720

아랍어(DOS)

737

ibm737

그리스어(DOS)

775

ibm775

발트어(DOS)

850

ibm850

서유럽어(DOS)

852

ibm852

중앙 유럽어(DOS)

855

IBM855

OEM 키릴 자모

857

ibm857

터키어(DOS)

858

IBM00858

OEM 다국 라틴 문자 I

860

IBM860

포르투갈어(DOS)

861

ibm861

아이슬란드어(DOS)

862

DOS-862

히브리어(DOS)

863

IBM863

프랑스어(캐나다)(DOS)

864

IBM864

아랍어(864)

865

IBM865

북유럽어(DOS)

866

cp866

키릴 자모(DOS)

869

ibm869

현대 그리스어(DOS)

870

IBM870

IBM EBCDIC(다국 라틴 문자-2)

874

windows-874

태국어(Windows)

875

cp875

IBM EBCDIC(현대 그리스어)

932

shift_jis

일본어(Shift-JIS)

936

gb2312

중국어 간체(GB2312)

*

949

ks_c_5601-1987

한국어

950

big5

중국어 번체(Big5)

1026

IBM1026

IBM EBCDIC(터키어 라틴 문자-5)

1047

IBM01047

IBM 라틴어-1

1140

IBM01140

IBM EBCDIC(미국-캐나다-유럽)

1141

IBM01141

IBM EBCDIC(독일-유럽)

1142

IBM01142

IBM EBCDIC(덴마크-노르웨이-유럽)

1143

IBM01143

IBM EBCDIC(핀란드-스웨덴-유럽)

1144

IBM01144

IBM EBCDIC(이탈리아-유럽)

1145

IBM01145

IBM EBCDIC(스페인-유럽)

1146

IBM01146

IBM EBCDIC(영국-유럽)

1147

IBM01147

IBM EBCDIC(프랑스-유럽)

1148

IBM01148

IBM EBCDIC(국제-유럽)

1149

IBM01149

IBM EBCDIC(아이슬란드어-유럽)

1200

utf-16

Unicode

*

1201

unicodeFFFE

유니코드(Big endian)

*

1250

windows-1250

중앙 유럽어(Windows)

1251

windows-1251

키릴 자모(Windows)

1252

Windows -1252

서유럽어(Windows)

*

1253

windows-1253

그리스어(Windows)

1254

windows-1254

터키어(Windows)

1255

windows-1255

히브리어(Windows)

1256

windows-1256

아랍어(Windows)

1257

windows-1257

발트어(Windows)

1258

windows-1258

베트남어(Windows)

1361

조합

한국어(조합)

10000

macintosh

서유럽어(Mac)

10001

x-mac-japanese

일본어(Mac)

10002

x-mac-chinesetrad

중국어 번체(Mac)

10003

x-mac-korean

한국어(Mac)

*

10004

x-mac-arabic

아랍어(Mac)

10005

x-mac-hebrew

히브리어(Mac)

10006

x-mac-greek

그리스어(Mac)

10007

x-mac-cyrillic

키릴 자모(Mac)

10008

x-mac-chinesesimp

중국어 간체(Mac)

*

10010

x-mac-romanian

루마니아어(Mac)

10017

x-mac-ukrainian

우크라이나어(Mac)

10021

x-mac-thai

태국어(Mac)

10029

x-mac-ce

중앙 유럽어(Mac)

10079

x-mac-icelandic

아이슬란드어(Mac)

10081

x-mac-turkish

터키어(Mac)

10082

x-mac-croatian

크로아티아어(Mac)

12000

utf-32

유니코드(UTF-32)

*

12001

utf-32BE

유니코드(UTF-32 Big endian)

*

20000

x-Chinese-CNS

중국어 번체(CNS)

20001

x-cp20001

TCA 대만

20002

x-Chinese-Eten

중국어 번체(Eten)

20003

x-cp20003

IIBM5550 대만

20004

x-cp20004

TeleText 대만

20005

x-cp20005

Wang 대만

20105

x-IA5

서유럽어(IA5)

20106

x-IA5-German

독일어(IA5)

20107

x-IA5-Swedish

스웨덴어(IA5)

20108

x-IA5-Norwegian

노르웨이어(IA5)

20127

us-ascii

US-ASCII

*

20261

x-cp20261

T.61

20269

x-cp20269

ISO -6937

20273

IBM273

IBM EBCDIC(독일)

20277

IBM277

IBM EBCDIC(덴마크-노르웨이)

20278

IBM278

IBM EBCDIC(핀란드-스웨덴)

20280

IBM280

IBM EBCDIC(이탈리아)

20284

IBM284

IBM EBCDIC(스페인)

20285

IBM285

IBM EBCDIC(영국)

20290

IBM290

IBM EBCDIC(일본어 가타카나)

20297

IBM297

IBM EBCDIC(프랑스)

20420

IBM420

IBM EBCDIC(아랍어)

20423

IBM423

IBM EBCDIC(그리스어)

20424

IBM424

IBM EBCDIC(히브리어)

20833

x-EBCDIC-KoreanExtended

IBM EBCDIC(한국어 확장)

20838

IBM-Thai

IBM EBCDIC(태국어)

20866

koi8-r

키릴 자모(KOI8-R)

20871

IBM871

IBM EBCDIC(아이슬란드어)

20880

IBM880

IBM EBCDIC(키릴 자모 러시아어)

20905

IBM905

IBM EBCDIC(터키어)

20924

IBM00924

IBM 라틴어-1

20932

EUC-JP

일본어(JIS 0208-1990 및 0212-1990)

20936

x-cp20936

중국어 간체(GB2312-80)

*

20949

x-cp20949

한국어(완성)

*

21025

cp1025

IBM EBCDIC(키릴 자모 세르비아어-불가리아어)

21866

koi8-u

키릴 자모(KOI8-U)

28591

iso-8859-1

서유럽어(ISO)

*

28592

iso-8859-2

중앙 유럽어(ISO)

28593

iso-8859-3

라틴어 3(ISO)

28594

iso-8859-4

발트어(ISO)

28595

iso-8859-5

키릴 자모(ISO)

28596

iso-8859-6

아랍어(ISO)

28597

iso-8859-7

그리스어(ISO)

28598

iso-8859-8

히브리어(ISO-Visual)

*

28599

iso-8859-9

터키어(ISO)

28603

iso-8859-13

에스토니아어(ISO)

28605

iso-8859-15

라틴어 9(ISO)

29001

x-Europa

유로파

38598

iso-8859-8-i

히브리어(ISO-Logical)

*

50220

iso-2022-jp

일본어(JIS)

*

50221

csISO2022JP

일본어(JIS-Allow 1 byte Kana)

*

50222

iso-2022-jp

일본어(JIS-Allow 1 byte Kana - SO/SI)

*

50225

iso-2022-kr

한국어(ISO)

*

50227

x-cp50227

중국어 간체(ISO-2022)

*

51932

euc-jp

일본어(EUC)

*

51936

EUC-CN

중국어 간체(EUC)

*

51949

euc-kr

한국어(EUC)

*

52936

hz-gb-2312

중국어 간체(HZ)

*

54936

GB18030

중국어 간체(GB18030)

*

57002

x-iscii-de

ISCII 데바나가리어

*

57003

x-iscii-be

ISCII 벵골어

*

57004

x-iscii-ta

ISCII 타밀어

*

57005

x-iscii-te

ISCII 텔루구어

*

57006

x-iscii-as

ISCII 아샘어

*

57007

x-iscii-or

ISCII 오리야어

*

57008

x-iscii-ka

ISCII 카나다어

*

57009

x-iscii-ma

ISCII 말라얄람어

*

57010

x-iscii-gu

ISCII 구자라트어

*

57011

x-iscii-pa

ISCII 펀잡어

*

65000

utf-7

유니코드(UTF-7)

*

65001

utf-8

유니코드(UTF-8)

*

GetByteCount() 메서드는 유니코드 문자 집합을 인코딩한 결과의 바이트 수를 결정하며 GetBytes() 메서드는 실제 인코딩을 수행합니다. GetBytes() 메서드는 단일 입력 스트림에서 여러 변환을 처리하는 GetBytes() 메서드와 달리 분리된 변환이 필요합니다.

GetByteCount()GetBytes()의 여러 버전이 지원됩니다. 다음은 이 메서드 사용과 관련된 몇 가지 프로그래밍 고려 사항입니다.

  • 응용 프로그램에서 많은 입력 문자를 코드 페이지에 인코딩하고 여러 호출을 사용하여 문자를 처리해야 할 수도 있습니다. 이 경우 응용 프로그램에서 호출 간에 상태를 유지하고 사용되는 Encoder 개체에 의해 보관된 상태를 고려해야 합니다.

  • 응용 프로그램에서 문자열 입력을 처리하는 경우 GetBytes()의 문자열 버전을 사용하는 것이 좋습니다.

  • GetBytes()의 유니코드 문자 버퍼 버전에서는 특히 Encoder 개체를 사용하거나 기존 버퍼에 삽입하는 여러 호출과 관련해서 몇 가지 빠른 방법을 사용할 수 있습니다. 그러나 이 메서드 버전은 포인터가 필요하므로 안전하지 않을 수 있습니다.

  • 응용 프로그램에서 많은 양의 데이터를 변환해야 하는 경우 출력 버퍼를 다시 사용해야 합니다. 이 경우 바이트 배열을 지원하는 GetBytes() 버전이 가장 적합합니다.

  • GetByteCount() 대신 Encoder.Convert 메서드를 사용합니다. 이 변환 메서드는 가능한 한 많은 데이터를 변환하며 출력 버퍼가 너무 작은 경우 예외를 throw합니다. 스트림의 연속 인코딩에는 이 메서드가 가장 적합할 수 있습니다.

GetCharCount() 메서드는 디코딩될 바이트 시퀀스의 문자 수를 결정하며, GetChars() 메서드는 실제 디코딩을 수행합니다. GetChars() 메서드는 단일 입력 스트림에서 여러 패스를 처리하는 GetChars() 메서드와 달리 분리된 변환이 필요합니다.

GetCharCount()GetChar()의 여러 버전이 지원됩니다. 다음은 이 메서드 사용과 관련된 몇 가지 프로그래밍 고려 사항입니다.

  • 응용 프로그램에서 코드 페이지의 여러 입력 바이트를 디코딩하고 여러 호출을 사용하여 바이트를 처리해야 할 수도 있습니다. 이 경우 응용 프로그램에서 호출 간에 상태를 유지해야 합니다.

  • 응용 프로그램에서 문자열 출력을 처리하는 경우 GetString() 메서드를 사용하는 것이 좋습니다. 이 메서드는 문자열 길이를 확인하고 버퍼를 할당해야 하므로 속도가 조금 더 느리지만 결과 String 형식이 선호됩니다.

  • GetChar()의 바이트 버전에서는 특히 큰 버퍼에 대한 여러 호출과 관련해서 몇 가지 빠른 방법을 사용할 수 있습니다. 그러나 이 메서드 버전은 포인터가 필요하므로 안전하지 않을 수 있습니다.

  • 응용 프로그램에서 많은 양의 데이터를 변환해야 하는 경우 출력 버퍼를 다시 사용해야 합니다. 이 경우 출력 문자 버퍼를 지원하는 GetChar() 버전이 가장 적합합니다.

  • GetCharCount() 대신 Decoder.Convert 메서드를 사용합니다. 이 변환 메서드는 가능한 한 많은 데이터를 변환하며 출력 버퍼가 너무 작은 경우 예외를 throw합니다. 스트림의 연속 디코딩에는 이 메서드가 가장 적합할 수 있습니다.

변환할 데이터를 순차 블록에서만 사용할 수 있거나(예: 스트림에서 읽은 데이터) 데이터의 양이 너무 커서 여러 개의 작은 블록으로 나눠야 하는 경우 응용 프로그램에서는 파생 클래스의 GetDecoder 메서드나 GetEncoder 메서드에서 각기 제공하는 Decoder 또는 Encoder를 사용해야 합니다.

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

  • UTF-16 big endian 바이트 순서: 00 41

  • UTF-16 little endian 바이트 순서: 41 00

  • UTF-32 big endian 바이트 순서: 00 00 00 41

  • UTF-32 little endian 바이트 순서: 41 00 00 00

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

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

바이트 순서 및 바이트 순서 표시에 대한 자세한 내용은 Unicode Home Page에 있는 The Unicode Standard를 참조하십시오.

인코딩 클래스를 사용하면 오류로 인해 다음 작업이 발생할 수 있습니다.

  • 자동으로 "?" 문자로 변경됩니다.

  • "자동 맞춤" 문자를 사용합니다.

  • EncoderFallbackDecoderFallback 클래스에 U+FFFD 유니코드 대체 문자를 사용하여 응용 프로그램별 동작으로 변경됩니다.

응용 프로그램에서 모든 데이터 스트림 오류에 대해 예외를 throw하는 것이 좋습니다. 응용 프로그램은 해당되는 경우 "throwonerror" 플래그를 사용하거나 EncoderExceptionFallbackDecoderExceptionFallback 클래스를 사용합니다. 자동 맞춤 대체는 데이터 손실이나 혼동을 발생시킬 수 있고 단순한 문자 대체보다 속도가 느리기 때문에 사용하지 않는 것이 좋습니다. ANSI 인코딩에서는 자동 맞춤 동작이 기본값입니다.

다음 코드 예제에서는 문자열의 인코딩을 변환합니다.

using System;
using System.Text;

namespace ConvertExample
{
   class ConvertExampleClass
   {
      static void Main()
      {
         string unicodeString = "This string contains the unicode character Pi(\u03a0)";

         // Create two different encodings.
         Encoding ascii = Encoding.ASCII;
         Encoding unicode = Encoding.Unicode;

         // Convert the string into a byte[].
         byte[] unicodeBytes = unicode.GetBytes(unicodeString);

         // Perform the conversion from one encoding to the other.
         byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);

         // Convert the new byte[] into a char[] and then into a string.
         // This is a slightly different approach to converting to illustrate
         // the use of GetCharCount/GetChars.
         char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
         ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
         string asciiString = new string(asciiChars);

         // Display the strings created before and after the conversion.
         Console.WriteLine("Original string: {0}", unicodeString);
         Console.WriteLine("Ascii converted string: {0}", asciiString);
      }
   }
}


package ConvertExample; 

import System.*;
import System.Text.*;

class ConvertExampleClass
{
    public static void main(String[] args)
    {
        String unicodeString = 
                "This string contains the unicode character Pi(\u03a0)";

        // Create two different encodings.
        Encoding ascii = Encoding.get_ASCII();
        Encoding unicode = Encoding.get_Unicode();

        // Convert the string into a byte[].
        ubyte unicodeBytes[] = unicode.GetBytes(unicodeString);

        // Perform the conversion from one encoding to the other.
        ubyte asciiBytes[] = Encoding.Convert(unicode, ascii, unicodeBytes);

        // Convert the new byte[] into a char[] and then into a string.
        // This is a slightly different approach to converting to illustrate
        // the use of GetCharCount/GetChars.
        char asciiChars[] = new 
                char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.length)];
        ascii.GetChars(asciiBytes, 0, asciiBytes.length, asciiChars, 0);
        String asciiString = new String(asciiChars);

        // Display the strings created before and after the conversion.
        Console.WriteLine("Original string: {0}", unicodeString);
        Console.WriteLine("Ascii converted string: {0}", asciiString);
    } //main
} //ConvertExampleClass 


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

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360

.NET Framework 및 .NET Compact Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

.NET Framework

3.5, 3.0, 2.0, 1.1, 1.0에서 지원

.NET Compact Framework

3.5, 2.0, 1.0에서 지원

XNA Framework

2.0, 1.0에서 지원
표시: