为什么std :: locale loc(“en_US”)会抛出异常?

时间:2010-07-10 22:16:30

标签: c++ locale

我尝试使用美国或英国语言环境字符串实例化std::locale对象 std::locale loc("en_US")std::locale loc("en_GB")都会引发错误的区域设置名称运行时异常。使用"""C"创建区域设置可以正常工作;但是,我在设置单个国家/地区时遇到问题。

我想这样做的原因是为了进行单元测试,以确保字符串排序方法的集合正常工作。

我还应该指出,我使用Visual Studio 2008在Windows中进行编码,如果可能的话,我希望保持代码跨平台。

2 个答案:

答案 0 :(得分:6)

std::locale支持的字符串是特定于实现的;可能是该实现不支持您作为参数传递的字符串。

由于您使用的是Windows编程,因此您可能会对Language Strings感兴趣,Country/Region Strings列出setlocal使用的语言标识符,std::locale::global(std::locale("zh-CN")) Gets "Bad locale name"??列出国家/地区标识符。据我所知,语言标识符使用连字符(例如 en-US nl-BE zh-HK )。

您可以在{{3}}

上找到更多信息

答案 1 :(得分:6)

您最好使用使用ICU库的boost.locale。 ICU提供了许多语言环境,并且不依赖于您使用的操作系统。要生成std :: locale,您需要编写:

boost::locale::generator gen;
std::locale loc = gen("en_US");

了解更多信息: http://www.boost.org/doc/libs/1_57_0_b1/libs/locale/doc/html/index.html