桁区切り#2016-12-14: C++ 関連なんだけど、
Cygwin で std::locale("") とか std::locale("ja_JP.UTF-8") とかが全然通らない。
std::locale() とか std::locale("C") は通るんだけど、どうしたらいいんだこれ?
どうも Cygwin の問題には違いないんだけど、libstdc++ のコンパイルオプションの問題のようで、以下のようなポストが見つかった。
上記 stackoverflow の投稿に boost::locale::generator で locale 生成城みたいなこと書いてあるんだけど、Cygwin だと、
最終手段としては libstdc++ 再コンパイル何だろうけど、それはちょっと面倒臭過ぎる。
Cygwin で std::locale("") とか std::locale("ja_JP.UTF-8") とかが全然通らない。
std::locale() とか std::locale("C") は通るんだけど、どうしたらいいんだこれ?
#include <iostream> #include <locale> #include <stdexcept> int main() { try { std::locale loc(""); std::cout << loc.name() << std::endl; } catch (std::runtime_error &e) { std::cout << e.what() << std::endl; } return 0; }
$ locale -a | grep ja ja_JP ja_JP.utf8 ja_JP@cjknarrow ja_JP.utf8@cjknarrow $ echo $LANG ja_JP.UTF-8@cjknarrow $ g++ stdlocaletest.cpp && ./a locale::facet::_S_create_c_locale name not valid $ g++ stdlocaletest.cpp -o stdlocaletest && LANG= ./stdlocaletest C $ g++ stdlocaletest.cpp -o stdlocaletest && LANG=C ./stdlocaletest C $ g++ stdlocaletest.cpp -o stdlocaletest && LANG=ja ./stdlocaletest locale::facet::_S_create_c_locale name not valid $ g++ stdlocaletest.cpp -o stdlocaletest && LANG=ja_JP ./stdlocaletest locale::facet::_S_create_c_locale name not valid $ g++ stdlocaletest.cpp -o stdlocaletest && LANG=ja_JP.UTF-8 ./stdlocaletest locale::facet::_S_create_c_locale name not valid
- stackoverflow
- Into the Horizon / 2012-06-29: c++で日本語の処理(ロケール周り) 7/8追記
- Hatena::Diary
- EAGLE 雑記 / 2009-02-08: [C/C++][GCC][2ch] libstdc++ のロケール問題
- GONE WITH THE MEDICINE / 2010-12-02: g++ でwcout使って日本語をコンソールに出力
上記 stackoverflow の投稿に boost::locale::generator で locale 生成城みたいなこと書いてあるんだけど、Cygwin だと、
boost::locale::generator gen; std::cout << gen("").name() << std::endl;とかやって gen() に 何喰わしてやっても .name() に "*" しか返って来ないので、exception 避け以外の効果が見込めなかった。
最終手段としては libstdc++ 再コンパイル何だろうけど、それはちょっと面倒臭過ぎる。
タグ
コメントをかく