【问题标题】:A good std::string cross-platform UTF8 alternative in C++11?C++11 中一个好的 std::string 跨平台 UTF8 替代方案?
【发布时间】:2012-10-19 19:18:54
【问题描述】:

我正在尝试在游戏中找到一个很好的替代 std::string 的方法。 wstring 在 Android 中无法正常工作。到目前为止,我只使用 ushort[]0-65535 范围(每个字符 2 个字节),它似乎适用于 11 种语言作为位图字体,但今后我希望得到更好的实现。

u8"xxxyyy" 文字符号在 VC++ 编译器中尚不支持,我还有什么其他选择?

【问题讨论】:

  • 阻力最小的路径可能是直接将 UTF-8 放入 std::string 对象中。对于任何不在 ASCII 范围内的内容,您将不得不使用手动编码的反斜杠转义来编写 UTF-8 文字,并且您将无法使用 locale,但根据我的经验,locale 无论如何都没用。
  • 我正在尝试获得正确的 UTF8 实现,以便其他人更容易修改文件以进行导入。
  • 也许你应该列出一些让你寻找替代 UTF-8 std::stringss 的东西。如果只是 u8 在 VS 中不受支持,那么您只需要解决该问题。
  • 为什么不将文本保存在 std:string 或 char[] 中?在代码中的任何地方都有字符串的 content 是一条通向无处的明确道路。让您的内容/资产/资源系统以二进制/UTF8 格式交付它们。每次您在代码中发现 xxx = "Game Over" 时,某处的游戏编码员都会死掉。
  • @Zack 如果您将其作为答案而不是评论,我会赞成。这是正确的方法。

标签: c++ string wstring


【解决方案1】:

阻力最小的路径可能是直接将 UTF-8 放入 std::string 对象中。对于不在 ASCII 范围内的任何内容,您将不得不使用手动编码的反斜杠转义来编写 UTF-8 文字,并且您将无法使用 locale,但根据我的经验,locale 无论如何都没用。我个人不能保证它的有用性,而且它非常庞大,但您可能会发现ICU 库有适合这种策略的例程。

【讨论】:

  • ICU 不仅有帮助,它还提供了一个专用类型icu::UnicodeString,它可以做所有你期望的Unicode 感知字符串类的花哨的东西。但是,内存存储是 UTF-16,而不是 UTF-8,所以要小心内存消耗。
猜你喜欢
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多