Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés
Ez a cikk kiegészítő megjegyzéseket tartalmaz az API referenciadokumentációjához.
A Encoding osztály 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átumokról (UTF-ekről) és a Encodingáltal támogatott egyéb kódolásokról a .NET Karakterkódolás című témakörben olvashat.
A 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 a Encoding osztály alábbi implementációit biztosítja az 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 ASCII tulajdonságon keresztül 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 UTF7 tulajdonságon keresztül 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 UTF8 tulajdonságon keresztül is elérhető.
UnicodeEncoding Unicode-karaktereket kódol az UTF-16 kódolással. "A 'little endian' és a 'big endian' bájtsorrendek is támogatottak." A Unicode tulajdonságon és a BigEndianUnicode tulajdonságon keresztül is elérhető.
UTF32Encoding Unicode-karaktereket kódol az UTF-32 kódolással. A little endian (kódlap: 12000) és a big endian (kódlap: 12001) bájtrendelések egyaránt támogatottak. A UTF32 tulajdonságon keresztül is elérhető.
A 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.
A GetEncoding metódussal szerezze be az egyéb kódolásokat, és hívja meg 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 tulajdonságainak értékeit. Az .NET-keretrendszer támogatási, .NET Core támogatásivagy .NET 5 és újabb támogatási oszlopban látható pipa jelzi, hogy a kódlapot az adott .NET-implementáció natív módon támogatja, függetlenül az alapul szolgáló platformtól. A .NET-keretrendszer esetében 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 a .NET 5 és újabb verziókhoz más kódolások is elérhetők a System.Text.CodePagesEncodingProvider osztály használatával vagy a System.Text.EncodingProvider osztályból származtatva.
Megjegyzés
Azok a kódlapok, amelyek EncodingInfo.Name tulajdonsága egy nemzetközi szabványnak felel meg, 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ása | .NET Core-támogatás | .NET 5 és újabb támogatás |
|---|---|---|---|---|---|
| 37 | IBM037 | IBM EBCDIC (US-Canada) | |||
| 437 | IBM437 | OEM Egyesült Államok | |||
| ötszáz | 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 karakterkészlet) | |||
| 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 (USA-Canada-Euro) | |||
| 1141 | IBM01141 | IBM EBCDIC (Germany-Euro) | |||
| 1142 | IBM01142 | IBM EBCDIC (Dánia -Norway-Euro) | |||
| 1143 | IBM01143 | IBM EBCDIC (Finnország-Sweden-Euro) | |||
| 1144 | IBM01144 | IBM EBCDIC (Italy-Euro) | |||
| 1145 | IBM01145 | IBM EBCDIC (Spain-Euro) | |||
| 1146 | IBM01146 | IBM EBCDIC (UK-Euro) | |||
| 1147 | IBM01147 | IBM EBCDIC (France-Euro) | |||
| 1148 | IBM01148 | IBM EBCDIC (International-Euro) | |||
| 1149 | IBM01149 | IBM EBCDIC (Icelandic-Euro) | |||
| Ezerkétszáz | utf-16 | Unicode | ✓ | ✓ | ✓ |
| 1201 | unicodeFFFE | Unicode (nagy vég-trendű) | ✓ | ✓ | ✓ |
| 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) | |||
| 10 000 | 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-arabic | Arab (Mac) | |||
| 10005 | x-mac-héber | Héber (Mac) | |||
| 10006 | x-mac-görög | Görög (Mac) | |||
| 10007 | x-mac-cirill | Cirill betű (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-török | Török (Mac) | |||
| 10082 | x-mac-horvát | Horvát (Mac) | |||
| 12000 | utf-32 | Unicode (UTF-32) | ✓ | ✓ | ✓ |
| 12001 | utf-32BE | Unicode (UTF-32 nagy végződésű) | ✓ | ✓ | ✓ |
| 20000 | x-Chinese-CNS | Hagyományos kínai (CNS) | |||
| 20001 | x-cp20001 | TCA Tajvan | |||
| 20002 | x-Chinese-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-German | Német (IA5) | |||
| 20107 | x-IA5-Swedish | Svéd (IA5) | |||
| 20108 | x-IA5-Norwegian | 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 (Denmark-Norway) | |||
| 20278 | IBM278 | IBM EBCDIC (Finland-Sweden) | |||
| 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 írás (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 Serbian-Bulgarian) | |||
| 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-Visual) | ✓ | ||
| 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-Logical) | ✓ | ||
| 50220 | iso-2022-jp | Japán (JIS) | ✓ | ||
| 50221 | csISO2022JP | Japán (JIS-Allow 1 bájt Kana) | ✓ | ||
| 50222 | iso-2022-jp | Japán (JIS-Allow 1 bájt 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 Dévanágari | ✓ | ||
| 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-or | 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 pandzsábi | ✓ | ||
| 65000 | utf-7 | Unicode (UTF-7) | ✓ | ✓ | |
| 65001 | utf-8 | Unicode (UTF-8) | ✓ | ✓ | ✓ |
Az alábbi példa meghívja a GetEncoding(Int32) és GetEncoding(String) metódusokat a görög (Windows) kódlap kódolásának lekéréséhez. Összehasonlítja a metódushívások által visszaadott Encoding 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($"{enc.EncodingName} = Code Page {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 a Decoder metódus vagy a származtatott osztály Encoder metódusa által biztosított GetDecoder vagy GetEncoder kell használnia.
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 nagy végű bájtsorrend: 00 41
- UTF-16 kis végű bájtsorrend: 41 00
- UTF-32 big endian bájtsorrend: 00 00 00 41
- UTF-32 kis endián 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ájtok tömbjét kéri le, amelyek tartalmazzák a bájtrendjelet (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ájtsorrendjelről további információt a Unicode Standard Unicode kezdőlapjántalál.
Vegye figyelembe, hogy a kódolási osztályok a következő hibákat teszik lehetővé:
- Csendesen váltson át a "?" karakterre.
- Használjon "legjobban illeszkedő" karaktert.
- Váltson alkalmazásspecifikus viselkedésre az U+FFFD Unicode helyettesítő karakterrel rendelkező EncoderFallback és DecoderFallback osztályok használatával.
Minden adatfolyam-hiba esetén kivételt kell dobnia. Egy alkalmazás vagy "throwonerror" jelzőt használ, ha alkalmazható, vagy a EncoderExceptionFallback és DecoderExceptionFallback osztályokat használja. A legjobb illeszkedési helyettesítés 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.