【问题标题】:Unicode strings in pure C++纯 C++ 中的 Unicode 字符串
【发布时间】:2012-08-12 13:53:41
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • '严肃的开源程序'不计算字符。它几乎总是没用的,seriosly

标签: c++ string unicode cross-platform


【解决方案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++> StackOverflow 聊天室联系作者,询问他的进度详情。

    【讨论】:

    • 哇。良好的破败和不错的机器人插头
    【解决方案3】:

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          我使用wxWidgets 来执行此操作。它可以轻松地从 std::string 转换为它们的字符串类型 wxString。它并不理想,但效果很好,简单且便携。

          【讨论】:

            猜你喜欢
            • 2012-07-19
            • 1970-01-01
            • 2011-05-15
            • 2014-06-18
            • 1970-01-01
            • 2014-06-12
            • 2017-02-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多