尝试实现 c++ 代码,我们可以使用非 utf8 字符作为 std::string 中的分隔符。
有没有非 UTF-8 char 这样的东西?
原文由 user643605 发布,翻译遵循 CC BY-SA 4.0 许可协议
尝试实现 c++ 代码,我们可以使用非 utf8 字符作为 std::string 中的分隔符。
有没有非 UTF-8 char 这样的东西?
原文由 user643605 发布,翻译遵循 CC BY-SA 4.0 许可协议
std::string
只知道原始 char
值,它对使用 char
保存编码值的特定字符编码一无所知。
许多常见的 UTF-8 实现使用 char
来保存编码的代码单元(尽管 C++20 将引入 char8_t
和 std::u8string
来代替)。但其他字符编码(Windows-12##、ISO-8859-# 等)也可以在 char
元素中拟合它们的编码值。
任何 char
属于 ASCII 范围 (0x00 .. 0x7F) 的值都将适合 1 char
并映射到 Unicode 中的相同代码点值 (U+0000 .. U+007F ),但任何 char
在 ANSI 范围内但不在 ASCII 范围内 (0x80 .. 0xFF) 的值都受创建 char
值的任何字符编码的解释。一些编码使用 1 char
每个字符,一些使用多个 char
s。
所以是的,有“非 UTF-8 字符”之类的东西。
原文由 Remy Lebeau 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答1.1k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
4 回答792 阅读
1 回答869 阅读
1 回答899 阅读
1 回答668 阅读
1 回答775 阅读
是的。 0xC0、0xC1、0xF5、0xF6、0xF7、0xF8、0xF9、0xFA、0xFB、0xFC、0xFD、0xFE、0xFF 是 无效的 UTF-8 代码单元。 UTF-8 代码单元是 8 位。如果
char
您的意思是 8 位字节,则无效的 UTF-8 代码单元将是char
不会出现在 UTF-8 编码文本中的值。