【发布时间】:2022-12-15 05:20:34
【问题描述】:
C++20 添加了char8_t,(我相信)它旨在帮助更好地支持 UTF-8。
标准要求 u8"abc" 形式的字符串常量是 char8_t[] 数组中的有效 UTF-8。这些常量也可以变成std::u8strings。
但是,我在 C++ 标准中找不到任何内容表明 std::u8string 必须或什至应该包含 UTF-8 字符串。 std::string 和 std::u8string 在 UTF-8 支持方面实际上有什么区别吗?
【问题讨论】:
-
char8_t- 用于 UTF-8 字符表示的类型,需要足够大以表示任何 UTF-8 代码单元(8 位)。它具有与unsigned char相同的大小、符号和对齐方式(因此,与char和signed char具有相同的大小和对齐方式),但是是不同的类型。 -
std::u8string是std::basic_string<char8_t>。 -
区别在于
std::string是std::basic_string<char>,char可以是有符号或无符号类型,而char8_t只是无符号类型。 -
“标准要求 u8"abc" 形式的字符串常量是有效的 UTF-8“:我不明白为什么这是真的。据我所知,格式错误的 UTF-8 序列是允许的,例如
u8"\xff"。