2012-11-02 4 views
7

私は、データベースからバイトストリームをコピーし、エンコードし、最後にそれをWebページに表示しようとしています。 (:私はラテン文字セットを持っており、中国語の文字をサポートしていない「西ヨーロッパ」エンコーディングを使用しています注):c#MemoryStreamエンコード対。 Encoding.GetChars()

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

対。しかし、私はさまざまな方法でコンテンツをエンコードする別の行動に気付いています

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

は、コンテンツは、エンコーディングがそれらの文字をサポートしていなければならないので、間違っています「D $教学而设计的」、のような文字列を生成するコードの最初のブロックよりも中国語の文字が含まれている場合は第二のブロック中"D $æ•™å|而设¡¡¡" "を生成します。これはすべて西欧の文字セットに含まれているものと同じです。

この動作の違いについての説明は何ですか?

答えて

9

StreamReaderコンストラクタは、異なるエンコーディングを渡した場合でも、ストリーム内のBOMを探し、エンコーディングを設定します。

データにUTF8 BOMがあり、UTF8が正しく使用されています。

は、この動作を防ぐ三番目のパラメータとしてfalseを渡すには:

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

感謝を!今は同じ文字列を生成します。好奇心のために、どのコードブロックを使用する方が良いですか?どちらの利点や欠点もありますか? – Sidawy