ポータブルで簡単な方法を探していたら、 http://ml.tietew.jp/cppll/cppll/article/4783 がよさそうだったけど、バグがあったのでいろいろ修正してみた。 #include <cstdlib> #include <string> //ワイド文字列からマルチバイト文字列 //ロケール依存 void narrow(const std::wstring &src, std::string &dest) { char *mbs = new char[src.length() * MB_CUR_MAX + 1]; wcstombs(mbs, src.c_str(), src.length() * MB_CUR_MAX + 1); dest = mbs; delete [] mbs; } //マルチバイト文字列からワイド文字列 //ロケール依存 void widen