質問

次の大量のコード(簡潔にするために抜粋)は、xmlドキュメントを生成し、それをファイルに出力します。 Visual Studioでファイルを開くと、中国語の文字が表示されます。メモ帳で開くと、期待どおりに見えます。 Console.WriteLineが正しいように見えます。

エンコードに関連していることは知っていますが、すべてのエンコードアヒルが一列に並んでいました。何が欠けているのですか?

StringBuilder stringBuilder = new StringBuilder();
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.Unicode;
settings.Indent = true; 
settings.IndentChars = "\t";
using (XmlWriter textWriter = XmlWriter.Create(new StringWriter(stringBuilder), settings))
{
    textWriter.WriteStartElement("Submission");
    textWriter.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
    textWriter.WriteEndElement();
}

using (StreamWriter sw = new StreamWriter(new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None)))
            {
                sw.Write(stringBuilder.ToString());
            }
役に立ちましたか?

解決

問題は、UTF-8を使用して disk に書き込みますが、 StringWriterであるため、 claim がUTF-16であることですはデフォルトで使用します-また、 Encoding.Unicode も使用するように明示的に設定しているためです。

これを修正する最も簡単な方法は、UTF-8として自分自身をアドバタイズするStringWriterを使用することです:

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

...そして、 settings.Encoding = Encoding.Unicode 行を削除します。そのようにして、全体でUTF-8を使用します。 (実際、 XmlWriterSettings Encoding プロパティは、 TextWriter を使用して XmlWriter を作成すると無視されます。)

UTF-16を本当に したい場合は、 StreamWriter を作成するときに、 Encoding.Unicode も指定します。

他のヒント

Encoding.Unicode が何なのかわかりませんが、文字ごとに2バイトをファイルに書き込むUTF-16であると思います。通常のASCIIテキストの場合、バイトの1つは常に0です。

代わりに UTF-8 を試してください。これは、特殊文字(コードポイント> = 128)を使用しない限り、どのエディターでも同じように見えるはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top