【问题标题】:Convert between string, u16string & u32string using libstdc++使用 libstdc++ 在字符串、u16string 和 u32string 之间进行转换
【发布时间】:2013-04-20 11:05:11
【问题描述】:

我发现了这个主题Convert between string, u16string & u32string 并且解决方案(看起来非常棒)仅使用 libc++ 而不是 libstdc++。目前 libc++ 不可用 - 难以编译且在 Windows 上无法正常工作。

是否有任何方法可以使用 C++11 和 libstdc++ 在所有平台上进行转换?

我对将 u32_string 转换为字符串 (utf8) 以及反之亦然特别感兴趣。

【问题讨论】:

  • 从 32 位 Unicode 字符串转换为 utf8 非常简单,大约 10 行代码。你有什么理由不能只写代码?将 utf8 转换为 32 位 Unicode 字符串并不难。这些格式简单且有据可查。
  • 我喜欢使用经过验证的库,而不是自己弄乱它。我不知道它这么简单,但我确信以前有人做过,所以我很想使用它——我非常相信代码的可重用性;)
  • 总有boost.locale
  • 为了更容易调试 Unicode 文本问题(任何处理文本的程序员都不可避免地会遇到),学习 UTF-8 和 UTF-16 编码/解码算法很可能是个好主意.一旦你了解了 Unicode 的工作原理,你就可以重新评估它们是否值得重用或编写自己的。 C++ 标准 Unicode 转换函数在locale/codecvt.

标签: c++ string unicode c++11 unicode-string


【解决方案1】:

在 C++11 中有一种可移植的方式通过 wstring_convert 类来执行此操作。

但是,libstdc++ 似乎还没有实现(从 gcc 4.8 开始)

同样适用于:

codecvt<char16_t, char, mbstate_t>.
codecvt<char32_t, char, mbstate_t>.
codecvt_utf8.
codecvt_utf16.
codecvt_utf8_utf16.

事实上,标头&lt;codecvt&gt; 仍然不存在于 gcc 发行版中。

【讨论】:

    【解决方案2】:

    您可以使用 utf8cpp (http://utfcpp.sourceforge.net/),它将这些转换器提供为易于使用的 C++。

    【讨论】:

      猜你喜欢
      • 2011-11-06
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 2017-09-06
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      相关资源
      最近更新 更多