System.Text.Encoding osztály
Ez a cikk kiegészítő megjegyzéseket tartalmaz az API referenciadokumentációjához.
Az Encoding osztály egy karakterkódolást jelöl.
A kódolás a Unicode-karakterek halmazának bájtok sorozatává alakításának folyamata. Ezzel szemben a dekódolás a kódolt bájtok sorozatának Unicode-karakterekből álló készletté alakításának folyamata. A Unicode-átalakítási formátumokkal (UTF-ekkel) és az egyéb, támogatott Encodingkódolásokkal kapcsolatos információkért lásd : Karakterkódolás a .NET-ben.
Encoding Tetszőleges bináris adatok, például bájttömbök helyett Unicode-karaktereken való működésre szolgál. Ha tetszőleges bináris adatokat kell szöveggé kódolnia, akkor olyan protokollt kell használnia, mint az uuencode, amelyet olyan metódusok implementálnak, mint a Convert.ToBase64CharArray.
A .NET az osztály alábbi implementációit biztosítja az Encoding aktuális Unicode-kódolások és más kódolások támogatásához:
ASCIIEncoding Unicode-karaktereket egyetlen 7 bites ASCII-karakterként kódol. Ez a kódolás csak az U+0000 és az U+007F közötti karakterértékeket támogatja. Kódlap 20127. A tulajdonságon keresztül ASCII is elérhető.
UTF7Encoding Unicode-karaktereket kódol az UTF-7 kódolással. Ez a kódolás az összes Unicode-karakterértéket támogatja. Kódlap: 65000. A tulajdonságon keresztül UTF7 is elérhető.
UTF8Encoding Unicode-karaktereket kódol az UTF-8 kódolással. Ez a kódolás az összes Unicode-karakterértéket támogatja. Kódlap: 65001. A tulajdonságon keresztül UTF8 is elérhető.
UnicodeEncoding Unicode-karaktereket kódol az UTF-16 kódolással. A kis endian és a big endian bájtos rendelések is támogatottak. A tulajdonságon és a UnicodeBigEndianUnicode tulajdonságon keresztül is elérhető.
UTF32Encoding Unicode-karaktereket kódol az UTF-32 kódolással. A kis endian (kódlap: 12000) és a big endian (kódlap: 12001) bájtrendelések egyaránt támogatottak. A tulajdonságon keresztül UTF32 is elérhető.
Az Encoding osztály elsősorban a különböző kódolások és a Unicode közötti konvertálásra szolgál. Gyakran az egyik származtatott Unicode-osztály a megfelelő választás az alkalmazás számára.
GetEncoding A metódussal más kódolásokat szerezhet be, és meghívhatja a GetEncodings metódust az összes kódolás listájának lekéréséhez.
Kódolások listája
Az alábbi táblázat a .NET által támogatott kódolásokat sorolja fel. Felsorolja az egyes kódolások kódlapszámát, valamint a kódolás EncodingInfo.Name és EncodingInfo.DisplayName a tulajdonságok értékeit. A .NET-keretrendszer támogatás, a .NET Core-támogatás vagy a .NET 5 és újabb támogatási oszlopban található pipa azt jelzi, hogy a kódlapot natív módon támogatja az adott .NET-implementáció, függetlenül az alapul szolgáló platformtól. A .NET-keretrendszer esetén a táblázatban felsorolt egyéb kódolások elérhetősége az operációs rendszertől függ. A .NET Core- és .NET 5-ös és újabb verziókhoz más kódolások is elérhetők az osztály használatával vagy az System.Text.CodePagesEncodingProviderSystem.Text.EncodingProvider osztályból való származtatással.
Feljegyzés
Azok a kódlapok, amelyek EncodingInfo.Name tulajdonsága megfelel egy nemzetközi szabványnak, nem feltétlenül teljes mértékben felelnek meg ennek a szabványnak.
Kódlap | Név | Megjelenítendő név | .NET-keretrendszer támogatás | .NET Core-támogatás | .NET 5 és újabb támogatás |
---|---|---|---|---|---|
37 | IBM037 | IBM EBCDIC (USA-Kanada) | |||
437 | IBM437 | OEM-Egyesült Államok | |||
500 | IBM500 | IBM EBCDIC (nemzetközi) | |||
708 | ASMO-708 | Arab (ASMO 708) | |||
720 | DOS-720 | Arab (DOS) | |||
737 | ibm737 | Görög (DOS) | |||
775 | ibm775 | Balti (DOS) | |||
850 | ibm850 | Nyugat-Európai (DOS) | |||
852 | ibm852 | Közép-Európai (DOS) | |||
855 | IBM855 | OEM cirill betűs | |||
857 | ibm857 | Török (DOS) | |||
858 | IBM00858 | OEM többnyelvű latin I | |||
860 | IBM860 | Portugál (DOS) | |||
861 | ibm861 | Izlandi (DOS) | |||
862 | DOS-862 | Héber (DOS) | |||
863 | IBM863 | Francia kanadai (DOS) | |||
864 | IBM864 | Arab (864) | |||
865 | IBM865 | Északi (DOS) | |||
866 | cp866 | Cirill (DOS) | |||
869 | ibm869 | Görög, Modern (DOS) | |||
870 | IBM870 | IBM EBCDIC (többnyelvű latin-2) | |||
874 | windows-874 | Thai (Windows) | |||
875 | cp875 | IBM EBCDIC (görög modern) | |||
932 | shift_jis | Japán (Shift-JIS) | |||
936 | gb2312 | Egyszerűsített kínai (GB2312) | ✓ | ||
949 | ks_c_5601-1987 | Koreai | |||
950 | big5 | Hagyományos kínai (Big5) | |||
1026 | IBM1026 | IBM EBCDIC (török latin-5) | |||
1047 | IBM01047 | IBM Latin-1 | |||
1140 | IBM01140 | IBM EBCDIC (US-Canada-Euro) | |||
1141 | IBM01141 | IBM EBCDIC (Németország-Euro) | |||
1142 | IBM01142 | IBM EBCDIC (Dánia-Norvégia-Euro) | |||
1143 | IBM01143 | IBM EBCDIC (Finnország-Svédország-Euro) | |||
1144 | IBM01144 | IBM EBCDIC (Olaszország-Euro) | |||
1145 | IBM01145 | IBM EBCDIC (Spanyolország-Euro) | |||
1146 | IBM01146 | IBM EBCDIC (UK-Euro) | |||
1147 | IBM01147 | IBM EBCDIC (Franciaország-Euro) | |||
1148 | IBM01148 | IBM EBCDIC (International-Euro) | |||
1149 | IBM01149 | IBM EBCDIC (izlandi-euro) | |||
1200 | utf-16 | Unicode | ✓ | ✓ | ✓ |
1201 | unicodeFFFE | Unicode (Big endian) | ✓ | ✓ | ✓ |
1250 | windows-1250 | Közép-Európai (Windows) | |||
1251 | windows-1251 | Cirill betűs (Windows) | |||
1252 | Windows-1252 | Nyugat-európai (Windows) | ✓ | ||
1253 | windows-1253 | Görög (Windows) | |||
1254 | windows-1254 | Török (Windows) | |||
1255 | windows-1255 | Héber (Windows) | |||
1256 | windows-1256 | Arab (Windows) | |||
1257 | windows-1257 | Balti (Windows) | |||
1258 | windows-1258 | Vietnami (Windows) | |||
1361 | Johab | Koreai (Johab) | |||
10000 | Macintosh | Nyugat-európai (Mac) | |||
10001 | x-mac-japanese | Japán (Mac) | |||
10002 | x-mac-chinesetrad | Hagyományos kínai (Mac) | |||
10003 | x-mac-koreai | Koreai (Mac) | ✓ | ||
10004 | x-mac-arab | Arab (Mac) | |||
10005 | x-mac-héber | Héber (Mac) | |||
10006 | x-mac-görög | Görög (Mac) | |||
10007 | x-mac-cirill betűs | Cirill (Mac) | |||
10008 | x-mac-chinesesimp | Egyszerűsített kínai (Mac) | ✓ | ||
10010 | x-mac-román | Román (Mac) | |||
10017 | x-mac-ukrán | Ukrán (Mac) | |||
10021 | x-mac-thai | Thai (Mac) | |||
10029 | x-mac-ce | Közép-európai (Mac) | |||
10079 | x-mac-izlandi | Izlandi (Mac) | |||
10081 | x-mac-turkish | Török (Mac) | |||
10082 | x-mac-horvát | Horvát (Mac) | |||
12000 | utf-32 | Unicode (UTF-32) | ✓ | ✓ | ✓ |
12001 | utf-32BE | Unicode (UTF-32 Big endian) | ✓ | ✓ | ✓ |
20000 | x-kínai-CNS | Hagyományos kínai (CNS) | |||
20001 | x-cp20001 | TCA Tajvan | |||
20002 | x-Kínai-Eten | Hagyományos kínai (Eten) | |||
20003 | x-cp20003 | IBM5550 Tajvan | |||
20004 | x-cp20004 | TeleText Tajvan | |||
20005 | x-cp20005 | Wang Tajvan | |||
20105 | x-IA5 | Nyugat-európai (IA5) | |||
20106 | x-IA5-német | Német (IA5) | |||
20107 | x-IA5-svéd | Svéd (IA5) | |||
20108 | x-IA5-norvég | Norvég (IA5) | |||
20127 | us-ascii | US-ASCII | ✓ | ✓ | ✓ |
20261 | x-cp20261 | T.61 | |||
20269 | x-cp20269 | ISO-6937 | |||
20273 | IBM273 | IBM EBCDIC (Németország) | |||
20277 | IBM277 | IBM EBCDIC (Dánia-Norvégia) | |||
20278 | IBM278 | IBM EBCDIC (Finnország-Svédország) | |||
20280 | IBM280 | IBM EBCDIC (Olaszország) | |||
20284 | IBM284 | IBM EBCDIC (Spanyolország) | |||
20285 | IBM285 | IBM EBCDIC (Egyesült Királyság) | |||
20290 | IBM290 | IBM EBCDIC (japán katakana) | |||
20297 | IBM297 | IBM EBCDIC (Franciaország) | |||
20420 | IBM420 | IBM EBCDIC (arab) | |||
20423 | IBM423 | IBM EBCDIC (görög) | |||
20424 | IBM424 | IBM EBCDIC (héber) | |||
20833 | x-EBCDIC-KoreanExtended | IBM EBCDIC (koreai kiterjesztett) | |||
20838 | IBM-Thai | IBM EBCDIC (thai) | |||
20866 | koi8-r | Cirill (KOI8-R) | |||
20871 | IBM871 | IBM EBCDIC (izlandi) | |||
20880 | IBM880 | IBM EBCDIC (cirill orosz) | |||
20905 | IBM905 | IBM EBCDIC (török) | |||
20924 | IBM00924 | IBM Latin-1 | |||
20932 | EUC-JP | Japán (JIS 0208-1990 és 0212-1990) | |||
20936 | x-cp20936 | Egyszerűsített kínai (GB2312-80) | ✓ | ||
20949 | x-cp20949 | Koreai Wansung | ✓ | ||
21025 | cp1025 | IBM EBCDIC (cirill szerb-bolgár) | |||
21866 | koi8-u | Cirill (KOI8-U) | |||
28591 | iso-8859-1 | Nyugat-Európai (ISO) | ✓ | ✓ | ✓ |
28592 | iso-8859-2 | Közép-európai (ISO) | |||
28593 | iso-8859-3 | Latin 3 (ISO) | |||
28594 | iso-8859-4 | Balti (ISO) | |||
28595 | iso-8859-5 | Cirill (ISO) | |||
28596 | iso-8859-6 | Arab (ISO) | |||
28597 | iso-8859-7 | Görög (ISO) | |||
28598 | iso-8859-8 | Héber (ISO-Vizualizáció) | ✓ | ||
28599 | iso-8859-9 | Török (ISO) | |||
28603 | iso-8859-13 | Észt (ISO) | |||
28605 | iso-8859-15 | Latin 9 (ISO) | |||
29001 | x-Europa | Europa | |||
38598 | iso-8859-8-i | Héber (ISO-Logikai) | ✓ | ||
50220 | iso-2022-jp | Japán (JIS) | ✓ | ||
50221 | csISO2022JP | Japán (JIS-Allow 1 byte Kana) | ✓ | ||
50222 | iso-2022-jp | Japán (JIS-Allow 1 byte Kana - SO/SI) | ✓ | ||
50225 | iso-2022-kr | Koreai (ISO) | ✓ | ||
50227 | x-cp50227 | Egyszerűsített kínai (ISO-2022) | ✓ | ||
51932 | euc-jp | Japán (EUC) | ✓ | ||
51936 | EUC-CN | Egyszerűsített kínai (EUC) | ✓ | ||
51949 | euc-kr | Koreai (EUC) | ✓ | ||
52936 | hz-gb-2312 | Egyszerűsített kínai (HZ) | ✓ | ||
54936 | GB18030 | Egyszerűsített kínai (GB18030) | ✓ | ||
57002 | x-iscii-de | ISCII Devanagari | ✓ | ||
57003 | x-iscii-be | ISCII Bengáli | ✓ | ||
57004 | x-iscii-ta | ISCII Tamil | ✓ | ||
57005 | x-iscii-te | ISCII Telugu | ✓ | ||
57006 | x-iscii-as | ISCII Assamese | ✓ | ||
57007 | x-iscii vagy | ISCII Oriya | ✓ | ||
57008 | x-iscii-ka | ISCII Kannada | ✓ | ||
57009 | x-iscii-ma | ISCII Malayalam | ✓ | ||
57010 | x-iscii-gu | ISCII Gujarati | ✓ | ||
57011 | x-iscii-pa | ISCII Punjabi | ✓ | ||
65000 | utf-7 | Unicode (UTF-7) | ✓ | ✓ | |
65001 | utf-8 | Unicode (UTF-8) | ✓ | ✓ | ✓ |
Az alábbi példa a GetEncoding(Int32) görög (Windows) kódlap kódolásának lekérésére szolgáló metódusokat hívja GetEncoding(String) meg. Összehasonlítja a Encoding metódushívások által visszaadott objektumokat, hogy azok egyenrangúak legyenek, majd a térképek megjelenítik a Unicode kódpontot és a megfelelő kódlap értékét a görög ábécé minden egyes karakteréhez.
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
Ha az átalakítandó adatok csak szekvenciális blokkokban (például adatfolyamból beolvasott adatokban) érhetők el, vagy ha az adatmennyiség olyan nagy, hogy kisebb blokkokra kell osztani, akkor egy származtatott osztály metódusát vagy metódusát kell használnia DecoderGetDecoderEncoder.GetEncoder
Az UTF-16 és az UTF-32 kódolók használhatják a big endian bájtsorrendet (elsőként a legjelentősebb bájt) vagy a kis endian bájtsorrendet (a legkevésbé jelentős bájt első). Az A latin betű (U+0041) például a következőképpen szerializálva van (hexadecimálisan):
- UTF-16 big endian bájtsorrend: 00 41
- UTF-16 kis endian bájtsorrend: 41 00
- UTF-32 big endian bájtsorrend: 00 00 00 00 41
- UTF-32 kis endian bájtsorrend: 41 00 00 00
Általában hatékonyabb Unicode-karaktereket tárolni a natív bájtsorrend használatával. Jobb például a kis endian bájtsorrendet használni a kis endian platformokon, például az Intel számítógépeken.
A GetPreamble metódus bájttömböt kér le, amely tartalmazza a bájtrendelési jelet (BOM). Ha ez a bájttömb egy kódolt adatfolyamra van előtagolva, segít a dekódolónak azonosítani a használt kódolási formátumot.
A bájtsorrendről és a bájtrendelési jelről további információt a Unicode kezdőlapján, a Unicode Standardban talál.
Vegye figyelembe, hogy a kódolási osztályok a következő hibákat teszik lehetővé:
- Csendesen váltson "?" karakterre.
- Használjon "legjobban illeszkedő" karaktert.
- Váltson alkalmazásspecifikus viselkedésre az EncoderFallback U+FFFD Unicode helyettesítő karakterrel rendelkező osztályok és DecoderFallback osztályok használatával.
Minden adatfolyam-hiba esetén kivételt kell kivennie. Az alkalmazások vagy "throwonerror" jelzőt használnak, ha alkalmazhatók, vagy az osztályokat és DecoderExceptionFallback az EncoderExceptionFallback osztályokat használják. A legjobb illeszkedési tartalék gyakran nem ajánlott, mert adatvesztést vagy zavart okozhat, és lassabb, mint az egyszerű karaktercserék. AZ ANSI-kódolások esetében a legjobb illesztési viselkedés az alapértelmezett.