none
XmlWriterで作成したXMLファイルの先頭 RRS feed

  • 質問

  • XML定義の前のファイルの一番最初に、3バイトの文字化けしたような文字が入ります。

    バイナリで見ると、"EF"、"BB"、"BF"が入ります。

    これをエンコードを変えずに入らないようにするにはどうしたらいいのでしょうか?

    なぜかわかりませんが、エンコードをASCIIにすると、これは起きません。

    private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
    	XmlWriterSettings^	Setting;
    	XmlWriter^	XML;
    
    	Setting = gcnew XmlWriterSettings();
    	Setting->Encoding = Encoding::ASCII;
    	//Setting->Encoding = Encoding::UTF8;
    	XML = XmlWriter::Create( "test.xml", Setting );
    	XML->WriteStartElement( "element1" );
    	XML->WriteString( "abc" );
    	XML->WriteEndElement();
    	XML->Close();
    }
    
    

    2010年11月23日 10:56

回答

  • XML定義の前のファイルの一番最初に、3バイトの文字化けしたような文字が入ります。
    バイナリで見ると、"EF"、"BB"、"BF"が入ります。

    UTF-8 に対応していないエディタで見たのでしょうか?
    これらのバイトは BOM と呼ばれるものです。詳細は Wikipedia などをご参照ください。
    http://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF

    これをエンコードを変えずに入らないようにするにはどうしたらいいのでしょうか?

    XmlWriter と BOM のキーワードで検索すると以下のページが見つかりました。
    (試していません)
    http://d.hatena.ne.jp/Kazzz/20070824/p2


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク K6963 2010年11月29日 11:49
    2010年11月23日 11:15
    モデレータ

すべての返信

  • XML定義の前のファイルの一番最初に、3バイトの文字化けしたような文字が入ります。
    バイナリで見ると、"EF"、"BB"、"BF"が入ります。

    UTF-8 に対応していないエディタで見たのでしょうか?
    これらのバイトは BOM と呼ばれるものです。詳細は Wikipedia などをご参照ください。
    http://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF

    これをエンコードを変えずに入らないようにするにはどうしたらいいのでしょうか?

    XmlWriter と BOM のキーワードで検索すると以下のページが見つかりました。
    (試していません)
    http://d.hatena.ne.jp/Kazzz/20070824/p2


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク K6963 2010年11月29日 11:49
    2010年11月23日 11:15
    モデレータ
  • BOM、バイトオーダーマークですね。文字 U+FEFF で、UTF-16 や UTF-32 ではバイトオーダーを明示するために先頭に付加します。バイトオーダーの概念が存在しない UTF-8 では意味はありませんが、付けてはいけないというわけでもありません(付けるべき、付けるべきでないという議論はあります)。

    UTF-8 で付けないようにするには、たとえば Encoding.UTF8 の代わりに、UTF8Encoding を new しそのコンストラクタで明示するなどの方法があります。

    2010年11月23日 11:16
  • レスありがとです(^^)

     

    BOMというのは始めて知りました。

    UTF-8のままでは扱いが面倒になるので、BOMの入らないエンコードにすることにしました。

     

    2010年11月29日 11:49