我很高兴看到C++ 11中的std::u16string和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和缓冲区大小,码点的数量和字符数正确区分?如果使用标准迭代器,是否要迭代字节,代码点或字符?
Nic*_*las 17
u16string而u32string不是"新的C++ 11类".它们只是std::basic_stringfor char16_t和cha32_t类型的typedef .
length永远等于size任何basic_string.它是T字符串中的's 的数量,其中T是模板的类型basic_string.
basic_string不以任何方式,形状或形式识别Unicode.它没有代码点,字形,Unicode字符,Unicode规范化或任何类型的概念.它只是一个有序的序列T.这是Unicode感知的唯一的事情u16string,并u32string为他们所使用的返回类型u""和U""文字.因此,它们可以存储Unicode编码的字符串,但它们不需要知道所述编码.
迭代器迭代元素T,而不是"字节,代码点或字符".如果T是char16_t,那么它将迭代char16_ts.如果字符串是UTF-16编码的,那么它将迭代UTF-16代码单元,而不是Unicode代码点或字节.
| 归档时间: |
|
| 查看次数: |
4510 次 |
| 最近记录: |