尝试实现c ++代码,在其中我们可以使用非utf8字符作为std :: string中的定界符。
是否存在非UTF-8字符?
答案 0 :(得分:2)
std::string
只知道原始的char
值,而对使用char
来保存编码值的特定字符编码一无所知。
许多常见的UTF-8实现都使用char
来保存编码的代码单元(尽管C ++ 20为此会引入char8_t
和std::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
。
是的,有一个“非UTF-8字符”之类的东西。
答案 1 :(得分:1)
是的。 invalid UTF-8 code units是0xC0、0xC1、0xF5、0xF6、0xF7、0xF8、0xF9、0xFA,0xFB,0xFC,0xFD,0xFE,0xFF。 UTF-8代码单元为8位。如果用char
表示8位字节,则无效的UTF-8代码单元将是char
值,这些值不会出现在UTF-8编码的文本中。
答案 2 :(得分:0)
您可以签出UTF-8 standard on Wiki。并非每个字节序列都是有效的UTF-8字符。即使是单个字节:0x11111000、0x11111111在UTF-8中也不是有效的第一个字节。
但是,我怀疑使用非UTF-8字符作为分隔符是一个好主意。您可能会发现某些程序(例如Notepad ++)在读取字符串输出时遇到问题。