有没有非utf8字符之类的东西

Is there such a thing as non-utf8 character

尝试实现 c++ 代码,我们可以在其中使用非 utf8 字符作为 std::string 中的分隔符。

是否有非 UTF-8 字符这样的东西?

std::string 只知道原始 char 值,它对使用 char 保存编码值的特定字符编码一无所知。

许多常见的 UTF-8 实现使用 char 来保存编码的代码单元(尽管 C++20 将为此引入 char8_tstd::u8string)。但是其他字符编码(Windows-12##、ISO-8859-# 等)也可以将它们的编码值放入 char 元素中。

任何落在 ASCII 范围 (0x00 .. 0x7F) 内的 char 值都将适合 1 char 并映射到 Unicode 中的相同代码点值 (U+0000 .. U+ 007F),但 ANSI 范围内但不在 ASCII 范围内 (0x80 .. 0xFF) 的任何 char 值都受创建 char 值的任何字符编码的解释。有些编码每个字符使用 1 char,有些使用多个 char

所以是的,有这样的东西 "non-UTF-8 char"。

您可以查看UTF-8 standard on Wiki。并非每个字节序列都是有效的 UTF-8 字符。即使它是单个字节:0x11111000、0x11111111 也不是 UTF-8 中的有效第一个字节。

不过,我怀疑使用非 UTF-8 字符作为分隔符是否是个好主意。您可能会发现某些程序(如 Notepad++)在读取字符串输出时出现问题。

是的。 0xC0、0xC1、0xF5、0xF6、0xF7、0xF8、0xF9、0xFA、0xFB、0xFC、0xFD、0xFE、0xFF 为invalid UTF-8 code units。 UTF-8 编码单元是 8 位。如果 char 是指 8 位字节,则无效的 UTF-8 代码单元将是未出现在 UTF-8 编码文本中的 char 值。