2013-06-07 8 views
8

Kann mir bitte jemand erklären, was ist der Unterschied Wette. Encoding.UTF8.GetBytes und UTF8Encoding.Default.GetBytes? Eigentlich versuche ich einen XML-String in ein Stream-Objekt zu konvertieren und was passiert jetzt, wenn ich diese Zeile verwenden:Unterschied zwischen Encoding.UTF8.GetBytes und UTF8Encoding.Default.GetBytes

MemoryStream stream = new MemoryStream(UTF8Encoding.Default.GetBytes(xml)); 

es gibt mir eine Fehlermeldung „System.Xml.XmlException: Ungültige Zeichen in der angegebenen Codierung“

aber wenn ich diese Linie verwenden, es funktioniert:

**MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xml));** 

Auch wenn es UTF8-Codierung in beiden Fällen, wie man arbeitet und der andere nicht zu sein scheint?

Antwort

12

Es gibt keine UTF8Encoding.Default Eigenschaft. Wenn Sie dies schreiben, geben Sie tatsächlich die statische Eigenschaft der Basisklasse Encoding.Default zurück, die nicht UTF8 ist (dies ist die standardmäßige ANSI-Codepagecodierung des Systems).

Als solche werden die zwei sehr unterschiedliche Ergebnisse angezeigt - da UTF8Encoding.Default tatsächlich Encoding.Default ist, werden Sie das gleiche wie zurück, wenn Sie verwenden ASCIIEncoding.Default oder einen der anderen System.Text.Encoding Subklassen.

Der richtige Weg UTF8Encoding zu verwenden ist mit einer Instanz, die Sie, wie zu erstellen:

MemoryStream stream = new MemoryStream((new UTF8Encoding()).GetBytes(xml)); 

Die oben sollte liefern die gleichen Ergebnisse wie:

MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xml)); 
+0

Much; p (entfernt Kommentar) –

+0

Edit "Die Eigenschaft Weg, UTF8Encoding zu verwenden", um "das richtige" zu sein ... würde mich nicht bearbeiten, da es nur eine 2-stellige Änderung ist. – Kevin

+0

@Kevin Danke - behoben –

Verwandte Themen