如何使用纯 C++ 安排正确处理 Unicode 字符串?
我的意思是,当您将 unicode 字符串放入 std::string 并计算其长度时,有时您会得到 5 个字符长的字符串的 10 个字符。
他们如何在严肃的开源程序中做到这一点?他们如何以跨平台的方式做到这一点?你如何将它与文件 i/o 和 stdin/stdout 流联系起来?
谢谢。
如何使用纯 C++ 安排正确处理 Unicode 字符串?
我的意思是,当您将 unicode 字符串放入 std::string 并计算其长度时,有时您会得到 5 个字符长的字符串的 10 个字符。
他们如何在严肃的开源程序中做到这一点?他们如何以跨平台的方式做到这一点?你如何将它与文件 i/o 和 stdin/stdout 流联系起来?
谢谢。
Boost.Locale是用 C++ 编写的,它封装了 ICU 库,并为它提供了一个不错的、非外来的接口。
对于 Unicode 工作,我的第一选择是 Boost.Locale,然后直接选择 ICU(如果 Boost.Locale 还没有包装一些东西)。
std::[w]string
,与流行的看法相反,它没有任何 Unicode 支持。它们都只在[w]char[_t]
单元上运行,以编码不可知的方式。
如果您只需要长度和转换以及编码验证形式的基本 Unicode 支持,那么有utfcpp,它为这些操作提供了一个漂亮的 C++ 接口。
像 Qt 和 wxWdigets 这样的应用程序框架确实提供了它们自己的string
类,它们提供了更好的 Unicode 支持,但通常会束缚您在整个代码中使用整个框架。
除此之外,还有ICU,它是当今标准的 Unicode 实现。
本网站上一位 C++ 大师正在进行的工作是ogonek。您当然可以通过Lounge<C++>
StackOverflow 聊天室联系作者,询问他的进度详情。
你检查过http://site.icu-project.org了吗?
ICU 目前是Unicode 库。如果你想要跨平台的 Unicode 支持,ICU 基本上是唯一获得它的地方。
如果它的界面不比自动霰弹枪的错误末端更不友好。
我已经使用wxWidgets来做到这一点。它可以轻松地从 std::string 转换为它们的字符串类型 wxString。它并不理想,但效果很好,简单且便携。