Как Вы находите допустимые имена локали?
Я в настоящее время использую 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
Вызов конструктора std :: locale ("") создает объект языкового стандарта, представляющий предпочтения пользователя. Стандарт не говорит, что это означает, но во многих системах библиотека заменяет все, что находится в переменной окружения (часто LANG
или LC_ALL
) вместо пустой строки. Например, обычное имя для американского языкового стандарта - «en_US». (В системах POSIX вы можете ввести locale -a
, чтобы перечислить имена поддерживаемых локалей.)
locale -a
подойдет вам.
Если вы имеете в виду программно из Библиотека std C ++ Я не уверен.
Этот вопрос о переполнении стека , вероятно, также актуален, но, похоже, он не получил особого ответа.