前の記事では、Viusal C++の例でstd::localeのコンストラクタやstd::setlocaleに対して”jpn_jpn.932″や”deu_deu.1252″という文字列を渡していました。これについての補足です。
答えはMSDNに載っており、言語および国/地域識別文字列にあります。そのページの下の言語識別文字列と国/地域識別文字列でjpnやdeuが見つけられます。たとえば、言語識別文字列で「日本語」の欄には「”japanese” または “jpn”」と書いてあります。932や1252はもちろんWindowsコードページです。
つまり、”jpn_jpn.932″と”deu_deu.1252″をUnix風に書けば、それぞれ”ja_JP.SJIS”と”de_DE.ISO-8859-1″となると言うわけです。
なお、よくstd::locale(“japanese”)という記述を見かけますが、これも一応間違ってはいないです。先ほどのMSDNライブラリのsetlocale、_wsetlocaleのページに載っているように、国・地域とコードページ指定は省略可能です。
std::locale(“japanese”)は「日本語出力のため」と、おまじないのように扱われていますが、Shift_JISで表現された文字列を出力するという目的であれば、std::locale(“.932”)のほうが適切なのに、と思います……。なお、私は特に必要のない場合CP_ACPとの一貫性をとってstd::locale(“”)派ですが。
スポンサード リンク |