System.Text.Encoding 클래스
이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.
Encoding 클래스는 문자 인코딩을 나타냅니다.
인코딩은 유니코드 문자 집합을 바이트 시퀀스로 변환하는 프로세스입니다. 반면 디코딩은 인코딩된 바이트 시퀀스를 유니코드 문자 집합으로 변환하는 프로세스입니다. UTF(유니코드 변환 형식) 및 지원되는 Encoding기타 인코딩에 대한 자세한 내용은 .NET의 문자 인코딩을 참조하세요.
Encoding 는 바이트 배열과 같은 임의의 이진 데이터 대신 유니코드 문자에서 작동하기 위한 것입니다. 임의의 이진 데이터를 텍스트로 인코딩해야 하는 경우 uuencode와 같은 프로토콜을 사용해야 합니다. 이 프로토콜은 다음과 같은 Convert.ToBase64CharArray메서드에 의해 구현됩니다.
.NET은 현재 유니코드 인코딩 및 기타 인코딩을 지원하기 위해 클래스의 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 및 big endian 바이트 주문이 모두 지원됩니다. 속성 및 BigEndianUnicode 속성을 통해 Unicode 서도 사용할 수 있습니다.
UTF32Encoding UTF-32 인코딩을 사용하여 유니코드 문자를 인코딩합니다. little endian(코드 페이지 12000) 및 big endian(코드 페이지 12001) 바이트 주문이 모두 지원됩니다. 속성을 통해 UTF32 서도 사용할 수 있습니다.
Encoding 클래스는 주로 서로 다른 인코딩과 유니코드 간에 변환하기 위한 것입니다. 파생 유니코드 클래스 중 하나가 앱에 적합한 선택인 경우가 많습니다.
메서드를 GetEncoding 사용하여 다른 인코딩을 가져오고 메서드를 GetEncodings 호출하여 모든 인코딩 목록을 가져옵니다.
인코딩 목록
다음 표에서는 .NET에서 지원하는 인코딩을 나열합니다. 각 인코딩의 코드 페이지 번호와 인코딩 및 EncodingInfo.DisplayName 속성의 값을 나열합니다EncodingInfo.Name. .NET Framework 지원, .NET Core 지원 또는 .NET 5 이상 지원 열의 검사 표시는 기본 플랫폼에 관계없이 해당 .NET 구현에서 코드 페이지가 기본적으로 지원됨을 나타냅니다. .NET Framework의 경우 테이블에 나열된 다른 인코딩의 가용성은 운영 체제에 따라 달라집니다. .NET Core 및 .NET 5 이상 버전의 경우 클래스를 사용 System.Text.CodePagesEncodingProvider 하거나 클래스에서 System.Text.EncodingProvider 파생하여 다른 인코딩을 사용할 수 있습니다.
참고 항목
해당 속성이 EncodingInfo.Name 국제 표준에 해당하는 코드 페이지가 반드시 해당 표준을 완전히 준수하지는 않습니다.
코드 페이지 | 이름 | 표시 이름 | .NET Framework 지원 | .NET Core 지원 | .NET 5 이상 지원 |
---|---|---|---|---|---|
37 | IBM037 | IBM EBCDIC(미국-캐나다) | |||
437 | IBM437 | OEM 미국 | |||
500 | IBM500 | IBM EBCDIC(International) | |||
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 Latin-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(International-Euro) | |||
1149 | IBM01149 | IBM EBCDIC(아이슬란드-유로) | |||
1200 | utf-16 | Unicode | ✓ | ✓ | ✓ |
1201 | unicodeFFFE | 유니코드(빅 엔디안) | ✓ | ✓ | ✓ |
1250 | windows-1250 | 중부 유럽(Windows) | |||
1251 | windows-1251 | 키릴 자모(Windows) | |||
1252 | Windows-1252 | Western European (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 | Johab | 한국어(조합) | |||
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-키릴 자모 | 키릴 자모(Mac) | |||
10008 | x-mac-chinesesimp | 중국어 간체(Mac) | ✓ | ||
10010 | x-mac-루마니아어 | 루마니아어(Mac) | |||
10017 | x-mac-ukrainian | 우크라이나어(Mac) | |||
10021 | x-mac-thai | 태국어(Mac) | |||
10029 | x-mac-ce | 중부 유럽(Mac) | |||
10079 | x-mac-icelandic | 아이슬란드어(Mac) | |||
10081 | x-mac-터키어 | 터키어(Mac) | |||
10082 | x-mac-크로아티아어 | 크로아티아어(Mac) | |||
12000 | utf-32 | 유니코드(UTF-32) | ✓ | ✓ | ✓ |
12001 | utf-32BE | 유니코드(UTF-32 빅 엔디안) | ✓ | ✓ | ✓ |
20000 | x-중국어-CNS | 중국어 번체(CNS) | |||
20001 | x-cp20001 | TCA 대만 | |||
20002 | x-Chinese-Eten | 중국어 번체(에텐) | |||
20003 | x-cp20003 | 대만 IBM5550 | |||
20004 | x-cp20004 | TeleText 대만 | |||
20005 | x-cp20005 | 왕 대만 | |||
20105 | x-IA5 | 서유럽어(IA5) | |||
20106 | x-IA5-German | 독일어(IA5) | |||
20107 | x-IA5-스웨덴어 | 스웨덴어(IA5) | |||
20108 | x-IA5-노르웨이어 | 노르웨이어(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 Latin-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 논리) | ✓ | ||
50220 | iso-2022-jp | 일본어(JIS) | ✓ | ||
50221 | csISO2022JP | 일본어(JIS 허용 1바이트 가나) | ✓ | ||
50222 | iso-2022-jp | 일본어(JIS 허용 1바이트 가나 - 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 Assamese | ✓ | ||
57007 | x-iscii-or | ISCII 오리야 | ✓ | ||
57008 | x-iscii-ka | ISCII Kannada | ✓ | ||
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) | ✓ | ✓ | ✓ |
다음 예제에서는 및 메서드를 GetEncoding(Int32)GetEncoding(String) 호출하여 그리스어(Windows) 코드 페이지 인코딩을 가져옵니다. 메서드 호출에서 반환된 개체를 비교하여 Encoding 동일한 것을 표시한 다음, 맵은 그리스어 알파벳의 각 문자에 대한 유니코드 코드 포인트와 해당 코드 페이지 값을 표시합니다.
using System;
using System.Text;
public class Example
{
public static void Main()
{
Encoding enc = Encoding.GetEncoding(1253);
Encoding altEnc = Encoding.GetEncoding("windows-1253");
Console.WriteLine("{0} = Code Page {1}: {2}", enc.EncodingName,
altEnc.CodePage, enc.Equals(altEnc));
string greekAlphabet = "Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η " +
"Θ θ Ι ι Κ κ Λ λ Μ μ Ν ν Ξ ξ " +
"Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ " +
"Φ φ Χ χ Ψ ψ Ω ω";
Console.OutputEncoding = Encoding.UTF8;
byte[] bytes = enc.GetBytes(greekAlphabet);
Console.WriteLine("{0,-12} {1,20} {2,20:X2}", "Character",
"Unicode Code Point", "Code Page 1253");
for (int ctr = 0; ctr < bytes.Length; ctr++) {
if (greekAlphabet[ctr].Equals(' '))
continue;
Console.WriteLine("{0,-12} {1,20} {2,20:X2}", greekAlphabet[ctr],
GetCodePoint(greekAlphabet[ctr]), bytes[ctr]);
}
}
private static string GetCodePoint(char ch)
{
string retVal = "u+";
byte[] bytes = Encoding.Unicode.GetBytes(ch.ToString());
for (int ctr = bytes.Length - 1; ctr >= 0; ctr--)
retVal += bytes[ctr].ToString("X2");
return retVal;
}
}
// The example displays the following output:
// Character Unicode Code Point Code Page 1253
// Α u+0391 C1
// α u+03B1 E1
// Β u+0392 C2
// β u+03B2 E2
// Γ u+0393 C3
// γ u+03B3 E3
// Δ u+0394 C4
// δ u+03B4 E4
// Ε u+0395 C5
// ε u+03B5 E5
// Ζ u+0396 C6
// ζ u+03B6 E6
// Η u+0397 C7
// η u+03B7 E7
// Θ u+0398 C8
// θ u+03B8 E8
// Ι u+0399 C9
// ι u+03B9 E9
// Κ u+039A CA
// κ u+03BA EA
// Λ u+039B CB
// λ u+03BB EB
// Μ u+039C CC
// μ u+03BC EC
// Ν u+039D CD
// ν u+03BD ED
// Ξ u+039E CE
// ξ u+03BE EE
// Ο u+039F CF
// ο u+03BF EF
// Π u+03A0 D0
// π u+03C0 F0
// Ρ u+03A1 D1
// ρ u+03C1 F1
// Σ u+03A3 D3
// σ u+03C3 F3
// ς u+03C2 F2
// Τ u+03A4 D4
// τ u+03C4 F4
// Υ u+03A5 D5
// υ u+03C5 F5
// Φ u+03A6 D6
// φ u+03C6 F6
// Χ u+03A7 D7
// χ u+03C7 F7
// Ψ u+03A8 D8
// ψ u+03C8 F8
// Ω u+03A9 D9
// ω u+03C9 F9
Imports System.Text
Module Example
Public Sub Main()
Dim enc As Encoding = Encoding.GetEncoding(1253)
Dim altEnc As Encoding = Encoding.GetEncoding("windows-1253")
Console.WriteLine("{0} = Code Page {1}: {2}", enc.EncodingName,
altEnc.CodePage, enc.Equals(altEnc))
Dim greekAlphabet As String = "Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η " +
"Θ θ Ι ι Κ κ Λ λ Μ μ Ν ν Ξ ξ " +
"Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ " +
"Φ φ Χ χ Ψ ψ Ω ω"
Console.OutputEncoding = Encoding.UTF8
Dim bytes() As Byte = enc.GetBytes(greekAlphabet)
Console.WriteLine("{0,-12} {1,20} {2,20:X2}", "Character",
"Unicode Code Point", "Code Page 1253")
For ctr As Integer = 0 To bytes.Length - 1
If greekAlphabet(ctr).Equals(" "c) Then Continue For
Console.WriteLine("{0,-12} {1,20} {2,20:X2}", greekAlphabet(ctr),
GetCodePoint(greekAlphabet(ctr)), bytes(ctr))
Next
End Sub
Private Function GetCodePoint(ch As String) As String
Dim retVal As String = "u+"
Dim bytes() As Byte = Encoding.Unicode.GetBytes(ch)
For ctr As Integer = bytes.Length - 1 To 0 Step -1
retVal += bytes(ctr).ToString("X2")
Next
Return retVal
End Function
End Module
' The example displays the following output:
' Character Unicode Code Point Code Page 1253
' Α u+0391 C1
' α u+03B1 E1
' Β u+0392 C2
' β u+03B2 E2
' Γ u+0393 C3
' γ u+03B3 E3
' Δ u+0394 C4
' δ u+03B4 E4
' Ε u+0395 C5
' ε u+03B5 E5
' Ζ u+0396 C6
' ζ u+03B6 E6
' Η u+0397 C7
' η u+03B7 E7
' Θ u+0398 C8
' θ u+03B8 E8
' Ι u+0399 C9
' ι u+03B9 E9
' Κ u+039A CA
' κ u+03BA EA
' Λ u+039B CB
' λ u+03BB EB
' Μ u+039C CC
' μ u+03BC EC
' Ν u+039D CD
' ν u+03BD ED
' Ξ u+039E CE
' ξ u+03BE EE
' Ο u+039F CF
' ο u+03BF EF
' Π u+03A0 D0
' π u+03C0 F0
' Ρ u+03A1 D1
' ρ u+03C1 F1
' Σ u+03A3 D3
' σ u+03C3 F3
' ς u+03C2 F2
' Τ u+03A4 D4
' τ u+03C4 F4
' Υ u+03A5 D5
' υ u+03C5 F5
' Φ u+03A6 D6
' φ u+03C6 F6
' Χ u+03A7 D7
' χ u+03C7 F7
' Ψ u+03A8 D8
' ψ u+03C8 F8
' Ω u+03A9 D9
' ω u+03C9 F9
변환할 데이터를 순차 블록(예: 스트림에서 읽은 데이터)에서만 사용할 수 있거나 데이터의 양이 너무 커서 더 작은 블록으로 나누어야 하는 경우 파생 클래스의 메서드 또는 메서드에서 각각 제공 GetDecoder 된 데이터나 GetEncoderEncoder 메서드를 사용해야 Decoder 합니다.
UTF-16 및 UTF-32 인코더는 big endian 바이트 순서(가장 중요한 바이트 우선) 또는 작은 엔디안 바이트 순서(가장 중요하지 않은 바이트 우선)를 사용할 수 있습니다. 예를 들어 라틴 문자 A(U+0041)는 다음과 같이 직렬화됩니다(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
일반적으로 네이티브 바이트 순서를 사용하여 유니코드 문자를 저장하는 것이 더 효율적입니다. 예를 들어 Intel 컴퓨터와 같은 little endian 플랫폼에서 작은 엔디안 바이트 순서를 사용하는 것이 좋습니다.
메서드는 GetPreamble BOM(바이트 순서 표시)을 포함하는 바이트 배열을 검색합니다. 이 바이트 배열이 인코딩된 스트림에 접두사를 지정하면 디코더가 사용되는 인코딩 형식을 식별하는 데 도움이 됩니다.
바이트 순서 및 바이트 순서 표시에 대한 자세한 내용은 유니코드 홈페이지의 유니코드 표준을 참조하세요.
인코딩 클래스는 다음과 같은 오류를 허용합니다.
- 자동으로 "?" 문자로 변경합니다.
- "최적" 문자를 사용합니다.
- 사용 하 여 애플리케이션별 동작을 변경 합니다 EncoderFallback 및 DecoderFallback U + FFFD 유니코드 대체 문자로 클래스입니다.
데이터 스트림 오류에 대해 예외를 throw해야 합니다. 앱은 해당하는 경우 "throwonerror" 플래그를 사용하거나 및 DecoderExceptionFallback 클래스를 EncoderExceptionFallback 사용합니다. 가장 적합한 대체(fallback)는 데이터 손실이나 혼동을 일으킬 수 있고 단순 문자 교체보다 느리기 때문에 권장되지 않는 경우가 많습니다. ANSI 인코딩의 경우 가장 적합한 동작이 기본값입니다.
.NET