2012-08-12 57 views
2

如何安排正确处理使用纯C++的Unicode字符串?纯C++中的Unicode字符串

我的意思是,当你把你的unicode字符串放入std :: string并计算它的长度时,有时你会得到10个字符的5个字符长的字符串。

他们在严肃的开源程序中如何做到这一点?他们如何以跨平台的方式做到这一点?你如何将它绑定到文件I/O和标准输入/标准输出流?

谢谢。

+0

'严重的开源程序'不计算字符。它几乎总是没用,[seriosly](http://utf8everywhere.org/#myth.strlen)。 – ybungalobill 2012-08-30 20:43:11

回答

5

这里有Boost.Locale,它是用C++编写的,它包装了ICU库,并为它提供了一个很好的非外来接口。

对于Unicode工作,我的第一个选择是Boost.Locale,其次是ICU(如果有什么Boost.Locale尚未包装)。

4

std::[w]string与流行的看法相反,它没有任何Unicode支持。它们都以编码不可知的方式仅在[w]char[_t]单元上操作。

如果您只需要长度和转换以及编码验证形式的基本Unicode支持,则有utfcpp,它为这些操作提供了一个漂亮的C++接口。

像Qt和wxWdigets这样的应用程序框架确实提供了它们自己的string类,它们提供了更好的Unicode支持,但通常会捆绑您在整个代码中使用整个框架。

除此之外,还有ICU,这是围绕今天的标准Unicode实现。

本网站上的一位C++高手正在进行的工作是ogonek。你一定可以通过StackOverflow聊天室的Lounge<C++>与作者联系,询问他的进展情况。

+0

Woot。良好的破败和机器人的好插头 – sehe 2012-08-12 19:19:30

1

ICU目前是 Unicode库。如果你想跨平台的Unicode支持,ICU基本上是唯一获得它的地方。

如果只有它的接口不比自动猎枪的错误末端更不友好。

0

我用wxWidgets来做到这一点。它使从std :: string到它们的字符串类型wxString的转换变得容易。这并不理想,但它运行良好,简单便携。