トップ回答者
fwriteを使いUNICODEで書き込むと\nが0D00 0A00でなく0D0A00になる

質問
-
fopen MSDNの説明
http://msdn.microsoft.com/ja-jp/library/yeby3zcb(VS.80).aspx のunicodeのサンプルにおいて発生します。
\nが正しくは、0D00 0A00になるはずですが、0D0A00になりますが これは問題ではないでしょうか。
hotcake
回答
-
「Flag および BOM に基づいて使用されるエンコーディング」の「BOM なし (または新しいファイル)」の値は確認されていますか?
UNICODE フラグの場合、ANSI として保存されるとあります。
(何も指定しない場合は ANSI とも書かれています)期待した結果を得るためには UTF-16LE の指定が必要なのではないでしょうか?
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク hotcake 2011年1月24日 3:28
すべての返信
-
「Flag および BOM に基づいて使用されるエンコーディング」の「BOM なし (または新しいファイル)」の値は確認されていますか?
UNICODE フラグの場合、ANSI として保存されるとあります。
(何も指定しない場合は ANSI とも書かれています)期待した結果を得るためには UTF-16LE の指定が必要なのではないでしょうか?
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク hotcake 2011年1月24日 3:28
-
それなら中途半端な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)
# サンプルが悪いとしか言えませんが…。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。