データベースからバイトストリームをコピーしてエンコードし、最後にWebページに表示しようとしています。ただし、コンテンツをさまざまな方法でエンコードするさまざまな動作に気づいています(注:ラテン文字セットを持ち、漢字をサポートしない「西ヨーロッパ」エンコードを使用しています)。
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 $教学而設定计的」のような文字列を生成します。これは、エンコーディングがそれらの文字をサポートするべきではないため正しくありませんが、2番目のブロックは「D$æ•」を生成します。 ™å¦è€Œè®¾è®¡çš„ "は、すべて西ヨーロッパの文字セットに含まれているため、正しいです。
この振る舞いの違いの説明は何ですか?