2

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

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

他们如何在严肃的开源程序中做到这一点?他们如何以跨平台的方式做到这一点?你如何将它与文件 i/o 和 stdin/stdout 流联系起来?

谢谢。

4

6 回答 6

5

Boost.Locale是用 C++ 编写的,它封装了 ICU 库,并为它提供了一个不错的、非外来的接口。

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

于 2012-08-12T14:46:42.890 回答
4

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

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

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

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

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

于 2012-08-12T14:08:43.440 回答
2

这是如何:http ://www.utf8everywhere.org

于 2012-08-12T20:02:40.610 回答
1

你检查过http://site.icu-project.org了吗?

于 2012-08-12T14:07:47.933 回答
1

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

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

于 2012-08-12T14:11:49.400 回答
0

我已经使用wxWidgets来做到这一点。它可以轻松地从 std::string 转换为它们的字符串类型 wxString。它并不理想,但效果很好,简单且便携。

于 2012-08-12T14:24:23.347 回答