缺少C++ 11中的std :: u8string

Ser*_*gio 8 unicode utf-8 c++11

为什么C++ 11提供std::u16stringstd::u32stringstd::u8string?我们需要实现utf-8编码或使用其他库吗?

lz9*_*z96 13

C++ 20补充char8_tstd::u8string.根据该提案,理由是:

UTF-8是唯一被C++标准支持的文本编码,没有明确的代码单元类型.缺少UTF-8编码字符和字符串文字的不同类型会阻止在设计用于与编码文本互操作的接口中使用重载和模板特化.无法推断出窄字符和字符串的编码限制了设计的可能性,并阻碍了在通用代码中无缝工作的优雅界面的产生.库作者必须选择限制编码支持,设计需要用户明确指定编码的接口,或者至少为实现定义的执行和UTF-8编码提供不同的接口.

char是有符号类型还是无符号类型是实现定义的,使用8位有符号字符的实现在使用UTF-8编码文本时处于不利地位,因为必须依赖转换为无符号类型的顺序正确处理多字节编码代码点的前导和延续代码单元.

缺少一个独特的类型和使用代码单元类型,其范围不包括完整的无符号范围的UTF-8代码单元,这对于使用UTF-8编码的文本提出了挑战,这些文本在使用UTF时不存在-16或UTF-32编码文本.附上了一个新的char8_t基本类型和相关库增强的建议,​​旨在消除使用UTF-8编码文本的障碍,并启用以一致方式使用所有五种标准强制文本编码的通用接口.