如何安排正确处理使用纯C++的Unicode字符串?纯C++中的Unicode字符串
我的意思是,当你把你的unicode字符串放入std :: string并计算它的长度时,有时你会得到10个字符的5个字符长的字符串。
他们在严肃的开源程序中如何做到这一点?他们如何以跨平台的方式做到这一点?你如何将它绑定到文件I/O和标准输入/标准输出流?
谢谢。
如何安排正确处理使用纯C++的Unicode字符串?纯C++中的Unicode字符串
我的意思是,当你把你的unicode字符串放入std :: string并计算它的长度时,有时你会得到10个字符的5个字符长的字符串。
他们在严肃的开源程序中如何做到这一点?他们如何以跨平台的方式做到这一点?你如何将它绑定到文件I/O和标准输入/标准输出流?
谢谢。
这里有Boost.Locale,它是用C++编写的,它包装了ICU库,并为它提供了一个很好的非外来接口。
对于Unicode工作,我的第一个选择是Boost.Locale,其次是ICU(如果有什么Boost.Locale尚未包装)。
你检查过http://site.icu-project.org了吗?
std::[w]string
与流行的看法相反,它没有任何Unicode支持。它们都以编码不可知的方式仅在[w]char[_t]
单元上操作。
如果您只需要长度和转换以及编码验证形式的基本Unicode支持,则有utfcpp,它为这些操作提供了一个漂亮的C++接口。
像Qt和wxWdigets这样的应用程序框架确实提供了它们自己的string
类,它们提供了更好的Unicode支持,但通常会捆绑您在整个代码中使用整个框架。
除此之外,还有ICU,这是围绕今天的标准Unicode实现。
本网站上的一位C++高手正在进行的工作是ogonek。你一定可以通过StackOverflow聊天室的Lounge<C++>
与作者联系,询问他的进展情况。
Woot。良好的破败和机器人的好插头 – sehe 2012-08-12 19:19:30
ICU目前是的 Unicode库。如果你想跨平台的Unicode支持,ICU基本上是唯一获得它的地方。
如果只有它的接口不比自动猎枪的错误末端更不友好。
我用wxWidgets来做到这一点。它使从std :: string到它们的字符串类型wxString的转换变得容易。这并不理想,但它运行良好,简单便携。
'严重的开源程序'不计算字符。它几乎总是没用,[seriosly](http://utf8everywhere.org/#myth.strlen)。 – ybungalobill 2012-08-30 20:43:11