我很高兴在 C++11 中看到std::u16string
and std::u32string
,但我想知道为什么没有std::u8string
处理 UTF-8 的情况。我的印象std::string
是为 UTF-8 设计的,但它似乎做得不太好。我的意思是,std::string.length()
仍然不返回字符串缓冲区的大小而不是字符串中的字符数?
那么,length()
新的 C++11 类的标准字符串的方法是如何定义的呢?它们是否返回字符串缓冲区的大小、代码点数或字符数(假设代理对是 2 个代码点,但只有一个字符。如果我错了,请纠正我)?
那怎么样size()
?不等于length()
吗?请参阅http://en.cppreference.com/w/cpp/string/basic_string/length了解我的困惑的来源。
所以,我想,我的基本问题是如何使用std::string
,std::u16string
和std::u32string
正确区分缓冲区大小、代码点数和字符数?如果您使用标准迭代器,您是在迭代字节、代码点还是字符?