前の記事では、Viusal C++の例でstd::localeのコンストラクタやstd::setlocaleに対して”jpn_jpn.932″や”deu_deu.1252″という文字列を渡していました。これについての補足です。

答えはMSDNに載っており、言語および国/地域識別文字列にあります。そのページの下の言語識別文字列国/地域識別文字列でjpnやdeuが見つけられます。たとえば、言語識別文字列で「日本語」の欄には「”japanese” または “jpn”」と書いてあります。9321252はもちろん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(“”)派ですが。

スポンサード リンク

この記事のカテゴリ

  • ⇒ Visual C++のlocale文字列
  • ⇒ Visual C++のlocale文字列