2014年3月13日木曜日

boost::filesystem v3 で windows 環境にて日本語ファイルを扱う備忘録

Default encoding under windows を参考にやってみました。 コンパイラが VC8 だったので、最初、手を抜いてソースコードを UTF-8 でファイルに保存して実行してみたら
#include <boost/locale.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/format.hpp>

int main()
{
  // Create and install global locale
  std::locale::global(boost::locale::generator().generate(""));
  //std::locale::global(boost::locale::generator().generate("ja_JP.UTF-8"));
  // Make boost.filesystem use it
  boost::filesystem::path::imbue(std::locale());
  // Now Works perfectly fine with UTF-8!
  boost::filesystem::ofstream hello("こんにちわ.txt"); 
  return 0;
}
出力されたファイル名が
こんにちめEtxt
なんじゃこれ??? あれこれ、試しているうちに、どうやら UTF-8 で保存したのがいけないみたいだという事で
#include <boost/locale.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/format.hpp>

int main()
{
  // Create and install global locale
  std::locale::global(boost::locale::generator().generate(""));
  //std::locale::global(boost::locale::generator().generate("ja_JP.UTF-8"));
  // Make boost.filesystem use it
  boost::filesystem::path::imbue(std::locale());
  // Now Works perfectly fine with UTF-8!
  //boost::filesystem::ofstream hello("こんにちわ.txt"); 
                                   //  こ          ん          に          ち          わ
  boost::filesystem::ofstream hello("\xE3\x81\x93\xE3\x82\x93\xE3\x81\xAB\xE3\x81\xA1\xE3\x82\x8F.txt"); 
  return 0;
}
と正攻法で書きなおしたら、ちゃんと動作しました。 また、くだらない事に時間を費やしてしまった(´・ω・`)

0 件のコメント: