2013-06-07 3 views
8

Qualcuno può spiegarmi per favore qual è la differenza scommessa. Encoding.UTF8.GetBytes e UTF8Encoding.Default.GetBytes? In realtà sto cercando di convertire una stringa XML in un oggetto stream e ciò che accade ora è ogni volta che uso questa linea:Differenza tra Encoding.UTF8.GetBytes e UTF8Encoding.Default.GetBytes

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

mi dà un errore "System.Xml.XmlException: Carattere non valido nella codifica dato"

, ma quando uso questa linea funziona benissimo:

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

Anche se sembra essere la codifica UTF-8 in entrambi i casi come si lavora e l'altro no?

risposta

12

Non c'è la proprietà UTF8Encoding.Default. Quando scrivi questo, stai effettivamente restituendo la proprietà statica della classe base, Encoding.Default, che non è UTF8 (è la codifica ANSI code-page predefinita del sistema).

Come tale, i due si otterranno risultati molto diversi - dal momento che è in realtà UTF8Encoding.DefaultEncoding.Default, si tornerà la stessa cosa se si utilizza ASCIIEncoding.Default o uno qualsiasi degli altri System.Text.Encoding sottoclassi.

Il modo corretto di utilizzare UTF8Encoding è con un'istanza si crea, come ad esempio:

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

È possibile che questo dovrebbe fornire gli stessi risultati:

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

Molto; p (commento rimosso) –

+0

Modifica "Il modo in cui utilizzare UTF8Encoding" per essere "La corretta" ... non mi consente di modificarlo poiché è solo un cambiamento di 2 caratteri. – Kevin

+0

@ Kevin Grazie - risolto –