2014年08月22日
C, C++ WIn32 標準ファイルIOライブラリでUTF入出力ができた
今までは、 CreateFile WriteFile などでファイル入出力することが多かったので、ファイル内のテキストエンコードはあまり気にしたことがなかったのだが、近ごろ、ログファイルをShiftJISではなく、UTF-8で出してほしいという要望があがってきた
今までのやり方と踏襲するなら MultiByteToWideChar を使って WriteFile の直前にUTF-8変換をすることにしていただろう
しかし、ログファイルの「出力には、よくある可変数個の引数を使って、いわゆる printf 方式で出力したいというのも人情である
また、共通ライブラリ化してあるものには、そうした標準ファイルIOを利用している箇所も多数あったため、改めて調べてみたら、fopen 時に、文字エンコードを指定できる機能があることがわかった
MSDNドキュメント
こうすると、初めてファイルを作成した際に、BOMが書き込まれて、メモ帳でもちゃんと読めるのがうれしい
※ちなみに、Windows向けのUTF-16はccs=UTF-16LEと記述すればよいようだ
※普通のCPUはx86系かx64系なのでLE(Little Endian)ということだろう
いつの間にか便利な機能が追加されていたものだ
今までのやり方と踏襲するなら MultiByteToWideChar を使って WriteFile の直前にUTF-8変換をすることにしていただろう
しかし、ログファイルの「出力には、よくある可変数個の引数を使って、いわゆる printf 方式で出力したいというのも人情である
また、共通ライブラリ化してあるものには、そうした標準ファイルIOを利用している箇所も多数あったため、改めて調べてみたら、fopen 時に、文字エンコードを指定できる機能があることがわかった
MSDNドキュメント
FILE* fp = fopen("test.txt", "a, ccs=UTF-8");
こうすると、初めてファイルを作成した際に、BOMが書き込まれて、メモ帳でもちゃんと読めるのがうれしい
※ちなみに、Windows向けのUTF-16はccs=UTF-16LEと記述すればよいようだ
※普通のCPUはx86系かx64系なのでLE(Little Endian)ということだろう
いつの間にか便利な機能が追加されていたものだ
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/2704398
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック