Подтвердить что ты не робот

Действительные имена локалей

Как вы находите правильные имена локалей?

В настоящее время я использую 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
4b9b3361

Ответ 1

Эта страница говорит:

Вызов конструктора std:: locale ( ") создает объект локали, который представляет пользовательские настройки. Стандарт не говорит, что это значит, но во многих системах библиотека заменяет все, что находится в переменной среды (часто LANG или LC_ALL) вместо пустой строки. Например, общее имя для американского языка -" en_US". (В системах POSIX вы можете ввести locale -a, чтобы отобразить имена поддерживаемых локалей.)

locale -a должен работать для вас.

Если вы имеете в виду программно из С++ std libary, я не уверен.

Этот вопрос о переполнении стека, вероятно, также уместен, но он, похоже, не получил большого ответа.

Edit

Для использования UTF-16 вам, вероятно, понадобится libiconv, как указано в этот вопрос.