c++ - C++11 对 Unicode 的支持程度如何?

标签 c++ unicode c++11

我已经阅读并听说 C++11 支持 Unicode。对此有几个问题:

  • C++ 标准库对 Unicode 的支持程度如何?
  • 是否 std::string应该做什么?
  • 我该如何使用它?
  • 潜在问题在哪里?
  • 最佳答案

    您可以安全地将 UTF-8 存储在 std::string 中。 (或在 char[]char* 中),因为 Unicode NUL (U+0000) 是 UTF-8 中的空字节,这是空字节出现的唯一方式在 UTF-8 中。因此,您的 UTF-8 字符串将根据所有 C 和 C++ 字符串函数正确终止,并且您可以使用 C++ iostream(包括 std::coutstd::cerr ,只要您的语言环境是 UTF-8 )。
    std::string 不能做什么对于 UTF-8 是获取代码点的长度。 std::string::size()将告诉您字符串长度(以字节为单位),当您在 UTF-8 的 ASCII 子集中时,它仅等于代码点的数量。

    如果您需要在 code point 处对 UTF-8 字符串进行操作级别(即不仅仅是存储和打印它们)或者如果您正在处理可能有许多内部空字节的 UTF-16,您需要查看宽字符串类型。

    关于c++ - C++11 对 Unicode 的支持程度如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17103925/

    相关文章:

    c++ - 将类字段传递给成员函数

    C++ 匿名 union 重新声明错误

    c++ - vector 的结束迭代器内容

    c++ - 如何最好地初始化和存储常量对象?

    c++ - 自修改代码 [C++]

    c++ - 如何在类定义中声明指向正在定义的类的指针?

    mysql - 使用 Openfire 在两个 iOS 设备(使用 MySQL 数据库)之间聊天时,表情符号在离线聊天中不起作用

    android - android 和希腊字母 (π) 上的 livecode 和 unicode

    python - 是否有一种 Pythonic 方法可以按最大字节数截断 Unicode 字符串?

    c++ - 如何使用 std::stoi 作为默认值创建 std::function 作为方法参数?