【发布时间】:2015-02-21 06:13:24
【问题描述】:
我的程序检查德语中的大写字母。
#include <iostream>
#include <boost/algorithm/string/classification.hpp>
#include <boost/locale.hpp>
using namespace std;
int main()
{
locale::global(locale("Germany_german"));
//locale::global(locale("de_DE.UTF-8")); //Also tried "de_DE.UTF-8", but does not work
string str1 = "über";
cout << boolalpha << any_of(str1.begin(), str1.end(), boost::algorithm::is_upper()) << endl;
string str2 = "Ää";
cout << boolalpha << any_of(str2.begin(), str2.end(), boost::algorithm::is_upper()) << endl;
return 0;
}
程序因控制台错误而崩溃
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
我不知道确切的语言环境字符串是什么,“de_DE.UTF-8”也不行。
有什么方法可以获取操作系统支持的所有语言环境的准确语言环境名称字符串。可能在头文件的某个地方有一个列表,但我没有看到任何 <locale> 头文件。
【问题讨论】:
-
您可以在命令行上执行
locale -a。 -
"de-DE" 和 "German_Germany" 应该可以工作。至少,您应该能够从这些字符串构造
locale。 -
关于枚举语言环境,见
EnumSystemLocalesEx -
@IgorTandetnik 我刚刚尝试了您的建议。我无法构建语言环境,编译器在 locale::global 行上抛出异常。
标签: c++ windows c++11 boost locale