是否有非utf8字符之类的东西

时间:2019-10-02 22:26:50

标签: c++ utf-8 stdstring

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

是否存在非UTF-8字符?

3 个答案:

答案 0 :(得分:2)

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

是的,有一个“非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 ++)在读取字符串输出时遇到问题。