c++ - Unicode std::string 类替换

标签 c++ string unicode locale

我正在寻找有关 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/

相关文章:

c++ - 问候,我的代码中有语法问题。你能帮助我吗?

c++ - GCC .data 部分更改

java - 该文档背后的意图是什么?

python - 如何将 utf-8 花式引号转换为中性引号

c++ - 为什么 VkKeyScanW 对 unicode 字符返回 -1?

java - 程序如何读取unicode?

C++,函数参数中的右值引用

c++ - 通过中断 purevirt.c 来调试 R6025 纯虚函数调用

c - 如何编写一个函数来永久更改传递的字符串

python - String.find 不返回任何值