我很高兴看到C++11中出现了
那么,新的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
对于 utf8 和u16string
对于 utf16 都可以正常工作:它处理相应类型的元素,并且不处理由多个元素表示的字符。 - Pete Becker