我正在寻找有关 unicode 感知 std::string 库替换的建议。我有一堆使用 std::string 及其迭代器等的代码,现在想支持 unicode 字符串(首选免费或开源实现,正则表达式功能会很棒!)。
此时我不确定我是否需要完全重写,或者我是否可以放弃一个支持所有 std::string 接口(interface)的新字符串库。 Unicode 世界似乎非常复杂,我只是想在我的应用程序中启用它,而不必了解它的每个方面。
顺便说一句,索引运算符在必须传回对 1、2、3 或 4 结构的引用时如何工作,理论上可以更改为 1、2、3 或 4 字节结构。如果传递了更大或更小的值,内部数据表示是否会原地来回移动?
最佳答案
如果您确定您的 std::string 包含什么,则不需要完全重写。例如,您可以假设(并转换输入以确保)您的 std::string 包含 UTF8 编码的字符串(对于那些需要本地化的字符串)。不要忘记 std::string 只是原始数据的容器,它与编码无关(即使在 C++0x 中,这也只是一种可能性,而不是必需的)。
然后当您将文本传递给其他需要不同编码的库时,您可以使用像 UTF8CPP 这样的库来转换为所需的编码(但大多数时候这些库会自己完成)。
这样就很简单了。在您的代码中使用标准 std::string 的 UTF8,允许将 unicode 字符串传递给其他所有内容(必要时进行转换)。
在 boost 社区邮件列表中已经有很多关于这个的讨论。也许阅读它(如果您有足够的时间......)可以帮助您了解其他可能的解决方案。
关于c++ - Unicode std::string 类替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6028093/