纯 C++ 中的 Unicode 字符串
Posted
技术标签:
【中文标题】纯 C++ 中的 Unicode 字符串【英文标题】:Unicode strings in pure C++ 【发布时间】:2012-08-12 13:53:41 【问题描述】:如何使用纯 C++ 安排正确处理 Unicode 字符串?
我的意思是,当您将 unicode 字符串放入 std::string 并计算其长度时,有时您会得到 5 个字符长的字符串的 10 个字符。
他们如何在严肃的开源程序中做到这一点?他们如何以跨平台的方式做到这一点?你如何将它绑定到文件 i/o 和 stdin/stdout 流?
谢谢。
【问题讨论】:
'严肃的开源程序'不计算字符。它几乎总是没用的,seriosly。 【参考方案1】:有Boost.Locale,它是用 C++ 编写的,封装了 ICU 库,并提供了一个不错的非外星接口。
对于 Unicode 工作,我的第一选择是 Boost.Locale,然后直接选择 ICU(如果 Boost.Locale 还没有包装的话)。
【讨论】:
【参考方案2】:std::[w]string
,与流行的看法相反,它不支持任何 Unicode。它们都只在[w]char[_t]
单元上以编码不可知的方式运行。
如果你只需要长度和转换以及编码验证形式的基本 Unicode 支持,有utfcpp,它为这些操作提供了一个漂亮的 C++ 接口。
Qt 和 wxWdigets 等应用程序框架确实提供了自己的 string
类,它们提供了更好的 Unicode 支持,但通常会束缚您在整个代码中使用整个框架。
除此之外,还有ICU,这是目前标准的Unicode实现。
本网站上一位 C++ 大师正在进行的工作是 ogonek。您当然可以通过Lounge<C++>
*** 聊天室联系作者,询问他的进度详情。
【讨论】:
哇。良好的破败和不错的机器人插头【参考方案3】:方法如下:http://www.utf8everywhere.org
【讨论】:
【参考方案4】:您检查过http://site.icu-project.org 了吗?
【讨论】:
【参考方案5】:ICU 目前是 Unicode 库。如果你想要跨平台的 Unicode 支持,ICU 基本上是唯一获得它的地方。
如果它的界面不比自动霰弹枪的错误末端更不友好。
【讨论】:
【参考方案6】:我使用wxWidgets 来执行此操作。它可以轻松地从 std::string 转换为它们的字符串类型 wxString。它并不理想,但效果很好,简单且便携。
【讨论】:
以上是关于纯 C++ 中的 Unicode 字符串的主要内容,如果未能解决你的问题,请参考以下文章
c++ 编译器如何从 utf8 源文件生成 unicode 字符串文字