24

有効なロケール名を見つけるにはどうすればよいですか?

現在 MAC OS X を使用してい
ますが、他のプラットフォームに関する情報も役立ちます。

#include <fstream>
#include <iostream>


int main(int argc,char* argv[])
{
    try
    {
        std::wifstream  data;
        data.imbue(std::locale("en_US.UTF-16"));
        data.open("Plop");
    }
    catch(std::exception const& e)
    {
        std::cout << "Exception: " << e.what() << "\n";
        throw;
    }
}

% g++ main.cpp
% ./a.out
Exception: locale::facet::_S_create_c_locale name not valid
Abort
4

1 に答える 1

23

このページは言う:

コンストラクター呼び出しstd::locale( "")は、ユーザーの設定を表すロケールオブジェクトを作成します。標準ではこれが何を意味するかについては述べられていませんが、多くのシステムでは、ライブラリは空の文字列の代わりに環境変数(多くの場合LANGまたは)で見つかったものを置き換えます。LC_ALLたとえば、アメリカのロケールの一般名は「en_US」です。(POSIXシステムでは、入力locale -aして、サポートされているロケールの名前をリストできます。)

locale -aあなたのために働くはずです。

プログラムでC++stdライブラリから意味するのであれば、よくわかりません。

このスタックオーバーフローの質問もおそらく関連性がありますが、彼はあまり反応がなかったようです。

編集

UTF-16を使用するには、この質問で説明したように、おそらくlibiconvを使用する必要があります。

于 2009-12-17T15:59:40.087 に答える