Допустимые названия локалей - PullRequest
22 голосов
/ 17 декабря 2009

Как найти действительные названия локалей?

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

1 Ответ

21 голосов
/ 17 декабря 2009

На этой странице написано:

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

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

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

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

Редактировать

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

...