是否有非utf8字符

问题描述 投票:0回答:3

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

是否存在非UTF-8字符?

c++ utf-8 stdstring
3个回答
1
投票

[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)中相同的代码点值,但任何[C0 ANSI范围中的]值,而不是ASCII范围(0x80 .. 0xFF)中的]值可以通过创建char值的任何字符编码进行解释。有些编码每个字符使用1个char,有些编码使用多个char

所以是的,有诸如“非UTF-8字符”之类的东西。


0
投票

您可以签出char。并非每个字节序列都是有效的UTF-8字符。即使是单个字节:0x11111000、0x11111111在UTF-8中也不是有效的第一个字节。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.