2013-06-07 13 views
8

Birisi bana farkın ne olduğunu açıklayabilir. Encoding.UTF8.GetBytes ve UTF8Encoding.Default.GetBytes? ": Verilen kodlama geçersiz karakter System.Xml.XmlException": Aslında ben bir dere nesnesine bir XML dizesi dönüştürmek için çalışıyor ve bu çizgiyi her kullandığınızda şimdi ne olacak olan amEncoding.UTF8.GetBytes ve UTF8Encoding.Default.GetBytes arasındaki fark

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

bana bir hata veriyor

ama bu çizgiyi kullandığınızda iyi çalışır:

her iki durumda da UTF8 kodlaması gibi görünüyor olsa da
**MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xml));** 

nasıl biri çalışır ve diğer değildir?

cevap

12

UTF8Encoding.Default özelliği yoktur. Bunu yazdığınızda, aslında UTF8 olmayan temel sınıf statik özelliğini Encoding.Default döndürüyorsunuz (bu, sistemin varsayılan ANSI kod sayfası kodlamasıdır).

Bunun gibi, iki çok farklı sonuçlar verir - UTF8Encoding.Default aslında Encoding.Default olduğundan, size ASCIIEncoding.Default veya diğer System.Text.Encoding alt sınıflarından herhangi birini kullanıyorsanız aynı şeyi dönecektir.

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

yukarıdakiyle aynı sonuçlar sağlamalıdır:

UTF8Encoding kullanmak için uygun bir yol gibi, oluşturmak örneğine ile çok

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

; p (uzaklaştırıldı yorum) –

+0

Düzenleme "UTF8Encoding kullanmak için özellik yolu", "Doğru" olmak ... sadece 2 karakter değişikliği olduğundan onu düzenlememe izin vermedi. – Kevin

+0

@Kevin Teşekkürler - sabit –