2016-03-11 11 views
7

デフォルトでは、StringWriterはそれ自体がUTF-16であることを宣伝します。通常XMLUTF-8です。 だから私はStringWriterシリアル化中にエンコードが心配すべきですか?

public class Utf8StringWriter : StringWriter 
{ 
    public override Encoding Encoding 
    { 
     get { return Encoding.UTF8; } 
    } 
} 

をサブクラス化することで、この問題を解決することができますしかし、なぜ私はそれを心配する必要がありますか? Utf8StringWriterの代わりにStringWriter(私のように)を使うことにしたらどうなるでしょうか?バグがありますか?

その後、私はそれがへの書き込み根底にあるものはネットstringを生成StringBuilder、あるとして実際に、その有用ではありませんMongoDb

+0

に関与していた場合でも、内部に起こるような方法のエンコーディングを変更しませんEncodingプロパティのゲッターをオーバーライド? http://stackoverflow.com/questions/13743250/meaning-of-xml-version-1-0-encoding-utf-8 –

答えて

3

StringWriterEncodingプロパティにこの文字列を書き込みます。 .Net文字列はutf16で内部的にコード化されていますが、それはあなたが心配する必要のない実装の詳細です。 Encodingは、TextWriterから継承されたプロパティにすぎません。TextWriterは、エンコードが問題となるターゲット(Streambyte[]、...)に書き込む可能性があるためです。

最後に、普通の古いstringになります。後でその文字列をシリアライズするために使用するエンコーディングはまだ固定されていません。文字列を引数として取るMongoDbクライアントの実装を使用している場合、それはあなたの心配さえありません!サイドノートでは


、エンコーディングが実際にこの質問のヘルプへの回答を行い StringWriter

関連する問題