hack ¤Î¤¿¤á¤Î¥Í¥¿Ä¢, etc,,,

¾õ¶·

·å¶èÀÚ¤ê#2016-12-14: C++ ´ØÏ¢¤Ê¤ó¤À¤±¤É¡¢
Cygwin ¤Ç std::locale("") ¤È¤« std::locale("ja_JP.UTF-8") ¤È¤«¤¬Á´Á³Ä̤é¤Ê¤¤¡£
std::locale() ¤È¤« std::locale("C") ¤ÏÄ̤ë¤ó¤À¤±¤É¡¢¤É¤¦¤·¤¿¤é¤¤¤¤¤ó¤À¤³¤ì¡©

stdlocaletest.cpp

#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;
}

Cygwin ¤Ç¤Î·ë²Ì

$ 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

Ubuntu 16.04.4 LTS ¤Ç¤Î·ë²Ì

$ g++ stdlocaletest.cpp -o stdlocaletest && ./stdlocaletest
ja_JP.UTF-8
¤É¤¦¤â Cygwin ¤ÎÌäÂê¤Ë¤Ï°ã¤¤¤Ê¤¤¤ó¤À¤±¤É¡¢libstdc++ ¤Î¥³¥ó¥Ñ¥¤¥ë¥ª¥×¥·¥ç¥ó¤ÎÌäÂê¤Î¤è¤¦¤Ç¡¢°Ê²¼¤Î¤è¤¦¤Ê¥Ý¥¹¥È¤¬¸«¤Ä¤«¤Ã¤¿¡£

¾åµ­ stackoverflow ¤ÎÅê¹Æ¤Ë boost::locale::generator ¤Ç locale À¸À®¾ë¤ß¤¿¤¤¤Ê¤³¤È½ñ¤¤¤Æ¤¢¤ë¤ó¤À¤±¤É¡¢Cygwin ¤À¤È¡¢
boost::locale::generator gen;
std::cout << gen("").name() << std::endl;
¤È¤«¤ä¤Ã¤Æ gen() ¤Ë ²¿¶ô¤ï¤·¤Æ¤ä¤Ã¤Æ¤â .name() ¤Ë "*" ¤·¤«Ê֤äÆÍè¤Ê¤¤¤Î¤Ç¡¢exception Èò¤±°Ê³°¤Î¸ú²Ì¤¬¸«¹þ¤á¤Ê¤«¤Ã¤¿¡£

ºÇ½ª¼êÃʤȤ·¤Æ¤Ï libstdc++ ºÆ¥³¥ó¥Ñ¥¤¥ë²¿¤À¤í¤¦¤±¤É¡¢¤½¤ì¤Ï¤Á¤ç¤Ã¤ÈÌÌÅݽ­²á¤®¤ë¡£

¥³¥á¥ó¥È¤ò¤«¤¯


¡Öhttp://¡×¤ò´Þ¤àÅê¹Æ¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

ÍøÍѵ¬Ìó¤ò¤´³Îǧ¤Î¤¦¤¨¤´µ­Æþ²¼¤µ¤¤

WikiÆ⸡º÷

¥Õ¥ê¡¼¥¨¥ê¥¢

´ÉÍý¿Í/Éû´ÉÍý¿Í¤Î¤ßÊÔ½¸¤Ç¤­¤Þ¤¹