boost::algorithm::to_upper/to_lower 适用于 UTF8 吗?boost::locale 不是必需的?

boost::algorithm::to_upper/to_lower ok for utf8? boost::locale not necessary?

提问人:Daniel Pinyol 提问时间:3/13/2013 最后编辑:CommunityDaniel Pinyol 更新时间:3/13/2013 访问量:3905

问:

我在几个地方读到boost::algorithm::to_upper/to_lower不适用于utf8:

但是在我的系统上,ubuntu 12.4.1 32 位,提升 1.46,语言环境en_GB。UTF-8,一切看起来都很好,只要我传递语言环境 例如:

std::locale englishUTF8locale("en_GB.UTF-8")
boost::algorithm::to_upper_copy(L"ü", englishUTF8locale) -> L"Ü"
boost::algorithm::to_lower_copy(L"и", englishUTF8locale) ->L"И"

值得注意的是,它在使用 std::wstring 时有效,但在使用 std::string 时无效

那么,boost::locale 真的没有必要吗?我的问题是我只能使用 boost 1.46,并且 locale 是为 1.48 创建的

C++ 字符串 提升 国际化

评论

2赞 Xymostech 3/13/2013
所以。。。你有问题吗?
0赞 aschepler 3/13/2013
链接的 Boost 页面给出了一个示例和解释,其中给出了不正确的结果......boost::algorithm::to_upper_copy
0赞 Daniel Pinyol 3/13/2013
@aschepler 这是因为在示例中,它们没有将任何语言环境传递给 boost::algorithm 函数。对于语言环境,我确实得到了大写字母“Ü”。
6赞 aschepler 3/13/2013
不,错误在于“ß”的大写字母是“SS”,而不是“ß”。但是,由于返回单个代码点,因此如果不使用输出字符串的算法,就无法解决此问题。boost::algorithm::to_lower
1赞 dalle 6/10/2013
@aschepler:+1,但你的评论应该是一个答案。

答: 暂无答案