none
fwriteを使いUNICODEで書き込むと\nが0D00 0A00でなく0D0A00になる RRS feed

回答

  • 「Flag および BOM に基づいて使用されるエンコーディング」の「BOM なし (または新しいファイル)」の値は確認されていますか?
    UNICODE フラグの場合、ANSI として保存されるとあります。
    (何も指定しない場合は ANSI とも書かれています)

    期待した結果を得るためには UTF-16LE の指定が必要なのではないでしょうか?


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

すべての返信

  • 「Flag および BOM に基づいて使用されるエンコーディング」の「BOM なし (または新しいファイル)」の値は確認されていますか?
    UNICODE フラグの場合、ANSI として保存されるとあります。
    (何も指定しない場合は ANSI とも書かれています)

    期待した結果を得るためには UTF-16LE の指定が必要なのではないでしょうか?


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク hotcake 2011年1月24日 3:28
    2011年1月22日 5:24
    モデレータ
  • FLAGはサンプルのとおりcss=unicodeになっていますが、この場合ANSIになると書いてありますが、

    それなら中途半端な0D0A00でなく0D0Aになるべきと思いますが、仕様と言われれば仕方ないです。

    UTF-16LEの指定で0D00 0A00になるのは確認しました。

    ありがとうございます。


    hotcake
    2011年1月24日 3:27
  • それなら中途半端な0D0A00でなく0D0Aになるべきと思いますが、仕様と言われれば仕方ないです。

    その前に、それらの前の文字列も 3C 00 78 00 と 00 が余分についていませんか?(UTF-16LE としては正しいが、ASCII としてはおかしい)
    fopen が ANSI モードで開いているのに Unicode(16bit-LE) を書こうとしておかしなバイト列になっているのでしょう。

    書き込もうとしているバイト列が 3C 00 78 00 (中略) 3E 00 0A 00 となっているところを、fwrite が改行文字の単純置換として 0A を 0D 0A にしただけだと思われます。(結果としては、3C 00 78 00 (中略) 3E 00 0D 0A 00)

    # サンプルが悪いとしか言えませんが…。


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