2012-11-02 27 views
7

Veritabanından bayt akışını kopyalamaya, kodlamaya ve sonunda bir web sayfasında görüntülemeye çalışıyorum.C# MemoryStream Kodlama Vs. Encoding.GetChars()

var encoding = Encoding.GetEncoding(1252 /*Western European*/); 
using (var fileStream = new StreamReader(new MemoryStream(content), encoding)) 
{ 
    var str = fileStream.ReadToEnd(); 
} 

Vs.: Ancak, ben (: Bir Latin karakter kümesi vardır ve Çin karakterleri desteklemeyen "Batı Avrupa" kodlamasını kullanıyorum not) farklı şekillerde içeriği kodlayan farklı davranışlar fark ediyorum

var encoding = Encoding.GetEncoding(1252 /*Western European*/); 
var str = new string(encoding.GetChars(content)); 

içerik, kodlama bu karakterleri desteklemesi gerektiğini, çünkü yanlış "D $ 教学 而 设计 的" gibi bir dize üretecek kodunun ilk bloktan daha Çince karakterler içeriyorsa ikinci blokta ise Batı Avrupa karakter setinde olduğu gibi doğru olan "D $ æ • ™ å¦è € Œè®¾è®¡çš„ "üretecek.

Bu farklılığın davranışındaki açıklama nedir?

cevap

9

StreamReader yapıcısı, akıştaki BOM'ları arayacak ve farklı bir kodlama geçirseniz bile kodlamasını bunlardan ayarlayacaktır.

Verilerinizde UTF8 BOM'unu görür ve doğru UTF8'i kullanır.

Bu davranışı engellemek üçüncü parametre olarak false geçmesi için:

var fileStream = new StreamReader(new MemoryStream(content), encoding, false) 
+0

Teşekkür! şimdi aynı diziyi üretiyorlar. Merak ettiğin, hangi kod bloğunu kullanman daha iyi? Ya herhangi bir avantaj veya dezavantaj var mı? – Sidawy

İlgili konular