Unicode std :: string类替换

Zam*_*son 10 c++ string unicode locale

我正在寻找有关unicode感知std :: string库替换的建议.我有一堆使用std :: string,它的迭代器等的代码,并且现在想支持unicode字符串(首选免费或开源实现,正则表达式功能会很棒!).

我现在还不确定是否需要完全重写,或者我是否可以放弃支持所有std :: string接口的新字符串库.unicode世界似乎非常复杂,我只是想在我的应用程序中启用它而不必学习它的每一个方面.

顺便说一下,如果索引运算符必须将引用传递回1,2,3或4结构,理论上可以转换为1,2,3或4字节结构,它如何工作.如果传递更大或更小的值,内部数据表示的来回移位是否会发生?

Kla*_*aim 10

如果确定std :: string包含的内容,则不需要完全重写.例如,您可以假设(并转换输入以确保)您的std :: string包含UTF8编码的字符串(对于那些需要本地化的字符串).不要忘记std :: string只是原始数据的容器,它与编码无关(即使在C++ 0x中,它只是一种可能性,而不是一种要求).

然后,当您将文本传递给需要不同编码的其他库时,您可以使用像UTF8CPP这样的库来转换为所需的编码(但大多数情况下,此类库会自行完成).

这样简单.代码中带有标准std :: string的UTF8,允许将unicode字符串传递给其他所有字符串(如果需要,可以进行转换).

在boost社区邮件列表中已经有很多关于此的讨论.也许阅读它(如果你有足够的时间......)可以帮助你理解其他可能的解决方案.


Gur*_*geh 7

根据您的需要,使用std :: wstring或更大,更复杂(但事实上标准)的ICU:http://site.icu-project.org/


dav*_*vka 6

你需要什么unicode编码?如果utf-8没问题,你可以看一下Glib :: ustring

Glib :: ustring与std :: string有很多相同的接口,但包含编码为UTF-8的Unicode字符.

  • 请注意,Glib :: ustring(应该)非常不容忍非法字符序列; 而且,如果它们被传递,例如在构造函数中,Glib将通过调用`std :: string((char*)0)`而不是抛出描述性异常来让事情崩溃. (4认同)