Encoding-Klasse
Stellt eine Zeichencodierung dar.
Namespace: System.Text
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public MustInherit Class Encoding
Implements ICloneable
'Usage
Dim instance As Encoding
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Encoding : ICloneable
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class Encoding abstract : ICloneable
/** @attribute SerializableAttribute() */
/** @attribute ComVisibleAttribute(true) */
public abstract class Encoding implements ICloneable
SerializableAttribute
ComVisibleAttribute(true)
public abstract class Encoding implements ICloneable
Hinweise
Beim Codieren werden Unicode-Zeichen in eine Bytefolge transformiert. Beim Decodieren wird dieser Vorgang umgekehrt: Eine Folge codierter Bytes wird dabei in Unicode-Zeichen transformiert.
Gemäß Unicode-Standard wird jedem Zeichen aller unterstützten Schriften ein Codepunkt (eine Zahl) zugewiesen. Dieser Codepunkt kann beispielsweise mit UTF (Unicode Transformation Format) codiert werden. Im Unicode-Standard, Version 3.2, werden folgende UTFs verwendet:
UTF-8, bei dem jeder Codepunkt als eine Folge von ein bis vier Bytes dargestellt wird.
UTF-16, bei dem jeder Codepunkt als eine Folge von ein bis zwei 16-Bit-Ganzzahlen dargestellt wird.
UTF-32, bei dem jeder Codepunkt als eine 32-Bit-Ganzzahl dargestellt wird.
.NET-Framework stellt folgende Implementierungen der Encoding-Klasse zur Unterstützung der aktuellen Unicode-Codierungen und anderer Codierungen bereit:
ASCIIEncoding codiert Unicode-Zeichen als einzelne 7-Bit-ASCII-Zeichen. Diese Codierung unterstützt nur Zeichenwerte zwischen U+0000 und U+007F. Codepage 20127. Auch verfügbar durch die ASCII-Eigenschaft.
UTF7Encoding codiert Unicode-Zeichen mit der UTF-7-Codierung. Diese Codierung unterstützt alle Unicode-Zeichenwerte. Codepage 65000. Auch verfügbar durch die UTF7-Eigenschaft.
UTF8Encoding codiert Unicode-Zeichen mit der UTF-8-Codierung. Diese Codierung unterstützt alle Unicode-Zeichenwerte. Codepage 65001. Auch verfügbar durch die UTF8-Eigenschaft.
UnicodeEncoding codiert Unicode-Zeichen mit der UTF-16-Codierung. Dabei werden die Bytereihenfolgen Little-Endian (Codepage 1200) und Big-Endian (Codepage 1201) unterstützt. Auch verfügbar durch die Unicode-Eigenschaft und die BigEndianUnicode-Eigenschaft.
UTF32Encoding codiert Unicode-Zeichen mit der UTF-32-Codierung. Dabei werden die Bytereihenfolgen Little-Endian (Codepage 65005) und Big-Endian (Codepage 65006) unterstützt. Auch verfügbar durch die UTF32-Eigenschaft.
Verwenden Sie die GetEncoding-Methode, um andere Codierungen zu erhalten. Verwenden Sie die GetEncodings-Methode, um eine Liste mit allen Codierungen abzurufen.
In der folgenden Tabelle sind die Codierungen und ihre zugeordneten Codepages aufgeführt. Ein Sternchen in der letzten Spalte zeigt an, dass die Codepage unabhängig von der zugrunde liegenden Plattform von .NET Framework unterstützt wird.
Codepage |
Name |
Anzeigename |
|
---|---|---|---|
37 |
IBM037 |
IBM EBCDIC (USA-Kanada) |
|
437 |
IBM437 |
OEM USA |
|
500 |
IBM500 |
IBM EBCDIC (International) |
|
708 |
ASMO-708 |
Arabisch (ASMO 708) |
|
720 |
DOS-720 |
Arabisch (DOS) |
|
737 |
ibm737 |
Griechisch (DOS) |
|
775 |
ibm775 |
Baltisch (DOS) |
|
850 |
ibm850 |
Westeuropäisch (DOS) |
|
852 |
ibm852 |
Osteuropäisch (DOS) |
|
855 |
IBM855 |
OEM Kyrillisch |
|
857 |
ibm857 |
Türkisch (DOS) |
|
858 |
IBM00858 |
OEM Multilingual Lateinisch I |
|
860 |
IBM860 |
Portugiesisch (DOS) |
|
861 |
ibm861 |
Isländisch (DOS) |
|
862 |
DOS-862 |
Hebräisch (DOS) |
|
863 |
IBM863 |
Französisch, Kanada (DOS) |
|
864 |
IBM864 |
Arabisch (864) |
|
865 |
IBM865 |
Nordisch (DOS) |
|
866 |
cp866 |
Kyrillisch (DOS) |
|
869 |
ibm869 |
Griechisch, modern (DOS) |
|
870 |
IBM870 |
IBM EBCDIC (Multilingual Lateinisch-2) |
|
874 |
windows-874 |
Thailändisch (Windows) |
|
875 |
cp875 |
IBM EBCDIC (Griechisch, modern) |
|
932 |
shift_jis |
Japanisch (Shift-JIS) |
|
936 |
gb2312 |
Chinesisch vereinfacht (GB2312) |
* |
949 |
ks_c_5601-1987 |
Koreanisch |
|
950 |
big5 |
Chinesisch (Traditionell) (Big5) |
|
1026 |
IBM1026 |
IBM EBCDIC (Türkisch, Latin-5) |
|
1047 |
IBM01047 |
IBM Lateinisch-1 |
|
1140 |
IBM01140 |
IBM EBCDIC (USA-Kanada-Europäisch) |
|
1141 |
IBM01141 |
IBM EBCDIC (Deutschland-Europäisch) |
|
1142 |
IBM01142 |
IBM EBCDIC (Dänemark-Norwegen-Europäisch) |
|
1143 |
IBM01143 |
IBM EBCDIC (Finnland-Schweden-Europäisch) |
|
1144 |
IBM01144 |
IBM EBCDIC (Italien-Europäisch) |
|
1145 |
IBM01145 |
IBM EBCDIC (Spanien-Europäisch) |
|
1146 |
IBM01146 |
IBM EBCDIC (Großbritannien-Europäisch) |
|
1147 |
IBM01147 |
IBM EBCDIC (Frankreich-Europäisch) |
|
1148 |
IBM01148 |
IBM EBCDIC (International-Europäisch) |
|
1149 |
IBM01149 |
IBM EBCDIC (Isländisch-Europäisch) |
|
1200 |
utf-16 |
Unicode |
* |
1201 |
unicodeFFFE |
Unicode (Big-Endian) |
* |
1250 |
windows-1250 |
Mitteleuropäisch (Windows) |
|
1251 |
windows-1251 |
Kyrillisch (Windows) |
|
1252 |
Windows-1252 |
Westeuropäisch (Windows) |
* |
1253 |
windows-1253 |
Griechisch (Windows) |
|
1254 |
windows-1254 |
Türkisch (Windows) |
|
1255 |
windows-1255 |
Hebräisch (Windows) |
|
1256 |
windows-1256 |
Arabisch (Windows) |
|
1257 |
windows-1257 |
Baltisch (Windows) |
|
1258 |
windows-1258 |
Vietnamesisch (Windows) |
|
1361 |
Johab |
Koreanisch (Johab) |
|
10000 |
macintosh |
Westeuropäisch (Mac) |
|
10001 |
x-mac-japanese |
Japanisch (Mac) |
|
10002 |
x-mac-chinesetrad |
Chinesisch traditionell (Mac) |
|
10003 |
x-mac-korean |
Koreanisch (Mac) |
* |
10004 |
x mac-arabic |
Arabisch (Mac) |
|
10005 |
x-mac-hebrew |
Hebräisch (Mac) |
|
10006 |
x-mac-greek |
Griechisch (Mac) |
|
10007 |
x-mac-cyrillic |
Kyrillisch (Mac) |
|
10008 |
x-mac-chinesesimp |
Chinesisch vereinfacht (Mac) |
* |
10010 |
x-mac-romanian |
Rumänisch (Mac) |
|
10017 |
x-mac-ukrainian |
Ukrainisch (Mac) |
|
10021 |
x-mac-thai |
Thailändisch (Mac) |
|
10029 |
x-mac-ce |
Mitteleuropäisch (Mac) |
|
10079 |
x-mac-icelandic |
Isländisch (Mac) |
|
10081 |
x-mac-turkish |
Türkisch (Mac) |
|
10082 |
x-mac-croatian |
Kroatisch (Mac) |
|
20000 |
x-Chinese-CNS |
Chinesisch traditionell (CNS) |
|
20001 |
x-cp20001 |
TCA Taiwan |
|
20002 |
x-Chinese-Eten |
Chinesisch traditionell (Eten) |
|
20003 |
x-cp20003 |
IBM5550 Taiwan |
|
20004 |
x-cp20004 |
TeleText Taiwan |
|
20005 |
x-cp20005 |
Wang Taiwan |
|
20105 |
x-IA5 |
Westeuropäisch (IA5) |
|
20106 |
x-IA5-German |
Deutsch (IA5) |
|
20107 |
x-IA5-Swedish |
Schwedisch (IA5) |
|
20108 |
x-IA5-Norwegian |
Norwegisch (IA5) |
|
20127 |
us-ascii |
US-ASCII |
* |
20261 |
x-cp20261 |
T.61 |
|
20269 |
x-cp20269 |
ISO-6937 |
|
20273 |
IBM273 |
IBM EBCDIC (Deutschland) |
|
20277 |
IBM277 |
IBM EBCDIC (Dänemark-Norwegen) |
|
20278 |
IBM278 |
IBM EBCDIC (Finnland-Schweden) |
|
20280 |
IBM280 |
IBM EBCDIC (Italien) |
|
20284 |
IBM284 |
IBM EBCDIC (Spanien) |
|
20285 |
IBM285 |
IBM EBCDIC (Großbritannien) |
|
20290 |
IBM290 |
IBM EBCDIC (Japanisch Katakana) |
|
20297 |
IBM297 |
IBM EBCDIC (Frankreich) |
|
20420 |
IBM420 |
IBM EBCDIC (Arabisch) |
|
20423 |
IBM423 |
IBM EBCDIC (Griechisch) |
|
20424 |
IBM424 |
IBM EBCDIC (Hebräisch) |
|
20833 |
x-EBCDIC-KoreanExtended |
IBM EBCDIC (Koreanisch, erweitert) |
|
20838 |
IBM-Thai |
IBM EBCDIC (Thailändisch) |
|
20866 |
koi8-r |
Kyrillisch (KOI8-R) |
|
20871 |
IBM871 |
IBM EBCDIC (Isländisch) |
|
20880 |
IBM880 |
IBM EBCDIC (Kyrillisch, Russisch) |
|
20905 |
IBM905 |
IBM EBCDIC (Türkisch) |
|
20924 |
IBM00924 |
IBM Lateinisch-1 |
|
20932 |
EUC-JP |
Japanisch (JIS 0208-1990 und 0212-1990) |
|
20936 |
x-cp20936 |
GB2312-80 Chinesisch (vereinfacht) |
* |
20949 |
x-cp20949 |
Koreanisch Wansung |
* |
21025 |
cp1025 |
IBM EBCDIC (Kyrillisch, Serbisch-Bulgarisch) |
|
21866 |
koi8-u |
Kyrillisch (KOI8-U) |
|
28591 |
iso-8859-1 |
Westeuropäisch (ISO) |
* |
28592 |
iso-8859-2 |
Mitteleuropäisch (ISO) |
|
28593 |
iso-8859-3 |
Lateinisch 3 (ISO) |
|
28594 |
iso-8859-4 |
Baltisch (ISO) |
|
28595 |
iso-8859-5 |
Kyrillisch (ISO) |
|
28596 |
iso-8859-6 |
Arabisch (ISO) |
|
28597 |
iso-8859-7 |
Griechisch (ISO) |
|
28598 |
iso-8859-8 |
Hebräisch (ISO-Visual) |
* |
28599 |
iso-8859-9 |
Türkisch (ISO) |
|
28603 |
iso-8859-13 |
Estnisch (ISO) |
|
28605 |
iso-8859-15 |
Lateinisch 9 (ISO) |
|
29001 |
x-Europa |
Europa |
|
38598 |
iso-8859-8-i |
Hebräisch (ISO-Logical) |
* |
50220 |
iso-2022-jp |
Japanisch (JIS) |
* |
50221 |
csISO2022JP |
Japanisch (JIS, 1 Byte Kana erlaubt) |
* |
50222 |
iso-2022-jp |
Japanisch (JIS, 1 Byte Kana erlaubt - SO/SI) |
* |
50225 |
iso-2022-kr |
Koreanisch (ISO) |
* |
50227 |
x-cp50227 |
ISO-2022 Chinesisch (vereinfacht) |
* |
51932 |
euc-jp |
Japanisch (EUC) |
* |
51936 |
EUC-CN |
Chinesisch vereinfacht (EUC) |
* |
51949 |
euc-kr |
Koreanisch (EUC) |
* |
52936 |
hz-gb-2312 |
Chinesisch vereinfacht (HZ) |
* |
54936 |
GB18030 |
GB18030 Chinesisch vereinfacht |
* |
57002 |
x-iscii-de |
ISCII Devanagari |
* |
57003 |
x-iscii-be |
ISCII Bengali |
* |
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 Punjabi |
* |
65000 |
utf-7 |
Unicode (UTF-7) |
* |
65001 |
utf-8 |
Unicode (UTF-8) |
* |
65005 |
utf-32 |
Unicode (UTF-32) |
* |
65006 |
utf-32BE |
Unicode (UTF-32-Big-Endian) |
* |
Die GetByteCount-Methode bestimmt, wie viele Bytes zum Codieren von Unicode-Zeichen benötigt werden, und die GetBytes-Methode führt die tatsächliche Codierung aus.
Ebenso bestimmt die GetCharCount-Methode, wie viele Zeichen sich aus der Decodierung einer Bytefolge ergeben, und die GetChars-Methode führt die tatsächliche Decodierung aus.
Wenn die zu konvertierenden Daten nur als sequenzielle Blöcke verfügbar sind (z. B. aus einem Stream gelesene Daten) oder wenn die Datenmenge so groß ist, dass sie in kleinere Blöcke aufgeteilt werden muss, verwenden Sie Decoder oder Encoder, die von der GetDecoder-Methode bzw. der GetEncoder-Methode einer abgeleiteten Klasse bereitgestellt werden.
Die UTF-16- und UTF-32-Encoder können die Big-Endian-Bytereihenfolge (mit dem höchstwertigen Byte an erster Stelle) oder die Little-Endian-Bytereihenfolge (mit dem niedrigstwertigen Byte an erster Stelle) verwenden. Beispielsweise wird der lateinische Großbuchstabe A (U+0041) wie folgt serialisiert (Hexadezimalwert):
UTF-16-Big-Endian-Bytereihenfolge: 00 41
UTF-16-Little-Endian-Bytereihenfolge: 41 00
UTF-32-Big-Endian-Bytereihenfolge: 00 00 00 41
UTF-32-Little-Endian-Bytereihenfolge: 41 00 00 00
Optional stellt Encoding eine Präambel bereit. Dabei handelt es sich um ein Bytearray, das der Bytefolge vorangestellt werden kann, die sich aus dem Codierungsprozess ergibt. Falls die Präambel eine Bytereihenfolgemarkierung (in Unicode: Codepunkt U+FEFF) enthält, kann der Decoder daraus die Bytereihenfolge und das Transformationsformat bzw. UTF ermitteln. Die Unicode-Bytereihenfolgemarkierung wird wie folgt serialisiert (hexadezimal):
UTF-8: EF BB BF
UTF-16-Big-Endian-Bytereihenfolge: FE FF
UTF-16-Little-Endian-Bytereihenfolge: FF FE
UTF-32-Big-Endian-Bytereihenfolge: 00 00 FE FF
UTF-32-Little-Endian-Bytereihenfolge: FF FE 00 00
Im Allgemeinen ist es effizienter, Unicode-Zeichen in der systemeigenen Bytereihenfolge zu speichern. So ist es besser, die Little-Endian-Bytereihenfolge auf entsprechenden Plattformen, beispielsweise auf Intel-Computern, zu verwenden.
Die GetPreamble-Methode gibt ein Bytearray zurück, das die Bytereihenfolgemarkierung enthalten kann. Wenn dieses Bytearray einem codierten Stream vorangestellt ist, unterstützt es den Decoder bei der Ermittlung des verwendeten Codierungsformats.
Weitere Informationen über die Bytereihenfolge und die Bytereihenfolgemarkierung finden Sie im Unicode-Standard unter http://www.unicode.org (nur auf Englisch verfügbar).
Beispiel
Im folgenden Codebeispiel wird eine Zeichenfolge von einer Codierung in eine andere konvertiert.
Imports System
Imports System.Text
Imports Microsoft.VisualBasic
Namespace Convert_Example
Class MyConvertExampleClass
Shared Sub Main()
Dim unicodeString As String = "This string contains the unicode character Pi(" & ChrW(&H03A0) & ")"
' Create two different encodings.
Dim ascii As Encoding = Encoding.ASCII
Dim [unicode] As Encoding = Encoding.Unicode
' Convert the string into a byte[].
Dim unicodeBytes As Byte() = [unicode].GetBytes(unicodeString)
' Perform the conversion from one encoding to the other.
Dim asciiBytes As Byte() = 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.
Dim asciiChars(ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)) As Char
ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0)
Dim asciiString As 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)
End Sub
End Class
End Namespace
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);
}
}
}
using namespace System;
using namespace System::Text;
int 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->Item[].
array<Byte>^unicodeBytes = unicode->GetBytes( unicodeString );
// Perform the conversion from one encoding to the other.
array<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.
array<Char>^asciiChars = gcnew array<Char>(ascii->GetCharCount( asciiBytes, 0, asciiBytes->Length ));
ascii->GetChars( asciiBytes, 0, asciiBytes->Length, asciiChars, 0 );
String^ asciiString = gcnew 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
Vererbungshierarchie
System.Object
System.Text.Encoding
Abgeleitete Klassen
Threadsicherheit
Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Plattformen
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
.NET Compact Framework
Unterstützt in: 2.0, 1.0