boost::locale::to_lower抛出bad_cast异常

4

在Win 7 64位和VS2010上使用Boost 1.54 x64。以“Release x64”编译并运行以下代码:

#include <boost/locale/conversion.hpp>
std::wstring y = L"NoNseNSE";
std::wstring w = boost::locale::to_lower(y);

抛出 std::bad_cast 异常。即使添加(在其他地方建议的)也没有改变:

std::locale mylocale("");
std::locale::global(mylocale);

to_lower(y)更改为:to_lower(y, mylocale),或者使用std::string代替std::wstring,或在环境中设置LANG。

目标是将意大利UTF-8单词转换为小写。我没有发现类似这样的问题,所以我认为这是我的机器特定问题或boost库的问题。顺便说一下,我从sourceforge下载了预编译的boost库(boost_1_54_0-msvc-10.0-64.exe)。有什么想法吗? 谢谢! 马里奥


如果您使用utf8,则“wstring”似乎从定义上来说是不可能的。 - sehe
1个回答

9
当你传递给boost::locale::to_lower的locale(默认为std::locale(),即全局locale的副本)没有安装boost::locale::converter facet时,会抛出此异常。请参阅相关文档了解更多信息
使用boost::locale::generator创建locale。 (还可以查看文档链接的示例,例如这个)。

谢谢,现在它可以工作了。我错误地认为std::locale lx;boost::locale::generator gen; std::locale lx=gen("");是等效的。 - SiliconValley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接