我可以使用Boost.Locale使我的应用程序中的所有std :: string都支持Unicode吗?阅读文档后,我可以说是的。但我不明白它是如何工作的。主要问题是我仍然可以使用boost字符串算法库或Boost.Lexical_Cast库吗?如果是的话,为什么我需要boost::locale::to_upper和类似的格式方法,如果我在boost字符串算法库中有这些方法。
答案 0 :(得分:2)
是的,您可以使用Boost.Locale对应用程序中的所有字符串进行Unicode编码。
要使其工作,您可以将语言环境填充到字符串中,或将默认的全局语言环境设置为新的基于unicode的语言环境(由Boost.Locale生成)。 请参阅此处了解如何执行此操作:http://www.boost.org/libs/locale/doc/html/locale_gen.html 和http://www.boost.org/libs/locale/doc/html/faq.html
Boost.Locale中的字符串操作API与Boost字符串算法库中提供的API不同。 请参阅此处了解Boost.Locale函数更好的原因:http://www.boost.org/libs/locale/doc/html/conversions.html
如果你正确设置全局语言环境,你仍然可以使用boost :: lexical_cast(如果我没记错的话,你不能将语言环境对象显式传递给Boost.LexicalCast)。
请记住,这会“破坏”某些情况,例如,在将整数转换为字符串而不是使用C语言环境时(可能是您之前的默认设置),它将使用不同的一个,在进行不向用户显示的转换时,您可能希望直接使用std :: stringstream等来避免这些不需要的格式更改。
我强烈建议您完整阅读Boost.Locale documentation,因为它应该解决您的大多数问题(尤其是常见问题解答,生成后端信息等)。