纯 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++ 中的 Unicode 字符串处理

C++ 中的跨平台字符串(和 Unicode)

在 C++ 中查找和比较 Unicode 字符

c++ 编译器如何从 utf8 源文件生成 unicode 字符串文字

Visual C++:将传统 C 和 C++ 字符串代码迁移到 Unicode 世界

一文带你弄懂C++中的ANSIUnicode和UTF8三种字符编码