2

我可以使用 Boost.Locale 使我的应用程序中的所有 std::string 都支持 Unicode 吗?阅读文档后,我可以说是。但我不明白它是如何工作的。主要问题是我还能使用 boost 字符串算法库或 Boost.Lexical_Cast 库吗?如果是,为什么我需要boost::locale::to_upper和类似的格式方法,如果我在 boost 字符串算法库中有这些方法。

4

1 回答 1

2

是的,您可以使应用程序中的所有字符串都使用 Boost.Locale 进行 Unicode 编码。

为了让它工作,你将语言环境注入到字符串中,或​​者将默认的全局语言环境设置为你的新的基于 unicode 的语言环境(由 Boost.Locale 生成)。请参阅此处了解如何执行此操作:http: //www.boost.org/libs/locale/doc/html/locale_gen.htmlhttp://www.boost.org/libs/locale/doc/html/faq。 html

Boost.Locale 中的字符串操作 API 与 Boost 字符串算法库中提供的不同。请参阅此处了解为什么 Boost.Locale 功能更好: http: //www.boost.org/libs/locale/doc/html/conversions.html

您仍然可以使用 boost::lexical_cast,前提是您正确设置了全局语言环境(因为,如果我没记错的话,您不能将语言环境对象显式传递给 Boost.LexicalCast)。

但是请记住,这会“破坏”某些情况,例如,将整数转换为字符串时,而不是使用 C 语言环境(可能是您以前的默认设置),它将使用不同的语言环境,这可能会插入分隔符等在进行不向用户显示的转换时,您可能希望直接使用 std::stringstream 等来避免这些不需要的格式更改。

我强烈建议您完整阅读Boost.Locale 文档,因为它应该解决您的大部分问题(尤其是常见问题解答、生成后端信息等)。

于 2012-02-07T00:30:26.500 回答