【发布时间】:2012-09-03 16:25:04
【问题描述】:
我很高兴在 C++11 中看到 std::u16string 和 std::u32string,但我想知道为什么没有 std::u8string 来处理 UTF-8 案例。我的印象是std::string 是为 UTF-8 设计的,但它似乎做得不太好。我的意思是,std::string.length() 不仍然返回字符串缓冲区的大小而不是字符串中的字符数吗?
那么,如何为新的 C++11 类定义标准字符串的 length() 方法?它们是否返回字符串缓冲区的大小、代码点数或字符数(假设代理对是 2 个代码点,但只有一个字符。如果我错了,请纠正我)?
那么size() 呢?不等于length()吗?
请参阅http://en.cppreference.com/w/cpp/string/basic_string/length 了解我的困惑来源。
所以,我想,我的基本问题是如何使用std::string、std::u16string 和std::u32string 并正确区分缓冲区大小、代码点数和字符数?如果您使用标准迭代器,您是在对字节、代码点还是字符进行迭代?
【问题讨论】:
-
std::string与u16string对 utf16 一样适用于 utf8:它处理相应类型的元素,而不处理由多个元素的序列表示的字符.