纯C ++中的Unicode字符串

时间:2012-08-12 13:53:41

标签: c++ string unicode cross-platform

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

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

他们是如何在严肃的开源程序中完成的?他们如何以跨平台的方式做到这一点?你如何将它绑定到文件i / o和stdin / stdout流?

感谢。

6 个答案:

答案 0 :(得分:5)

Boost.Locale,用C ++编写,包装了ICU库,并为它提供了一个漂亮的非外来接口。

对于Unicode工作,我的第一选择是Boost.Locale,然后直接选择ICU(如果Boost.Locale还没有包装的话)。

答案 1 :(得分:4)

与普遍看法相反,

std::[w]string没有任何Unicode支持。它们都只能在[w]char[_t]单元上以编码无关的方式运行。

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

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

除此之外,还有ICU,它是 标准的Unicode实现方式。

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

答案 2 :(得分:2)

答案 3 :(得分:1)

您已经检查过http://site.icu-project.org了吗?

答案 4 :(得分:1)

ICU目前是 Unicode库。如果您需要跨平台的Unicode支持,ICU基本上是唯一可以获得它的地方。

如果只有它的界面不比自动霰弹枪的错误末端更不友好。

答案 5 :(得分:0)

我已经使用wxWidgets来执行此操作。它使得从std :: string轻松转换为字符串类型wxString。它并不理想,但效果很好,简单易用。