在空白字符上拆分 UTF-8 编码字符串,而无需了解 UTF-8 编码

Split a UTF-8 encoded string on blank characters without knowing about UTF-8 encoding

本文关键字:UTF-8 编码 了解 字符串 编码字符 拆分 空白 字符      更新时间:2023-10-16
我想在每个空白字符(' ', '', '\r', '\t', '\

v', '\f'(字符串以 UTF8 编码存储在字节数组中(例如 char*、向量或字符串(

我可以在每个拆分字符处拆分字节数组吗?否则,我确定在多字节字符中找不到与这些字符对应的字节值吗?通过查看 UTF-8 规范,似乎所有多字节字符都只有大于 128 的字节。

谢谢

是的,你可以。

多字节序列必须包括一个前导字节(两个MSB等于11(和一个或多个继续字节(两个MSB等于10(。 在第一个位 0 出现之前,多字节序列的总长度(前导字节+延续字节(等于前导字节中等于 1 的 MSB 计数(例如:如果前导字节110xxxxx,则后面应该正好有一个延续字节;如果是11110xxx,则应该正好有三个延续字节(。

因此,如果您发现没有前导字节的短 MB 序列或杂散的延续 b 字节,那么您的字符串无论如何都可能无效,并且您拆分过程可能不会比它可能已经存在的内容更进一步。

但是您可能需要注意一些事情:Unicode 在非 ASCII 兼容范围的上限中引入了其他"空白"符号。 您可能希望相应地对待它们。

如果你把自己限制在你提到的一组空格字符上,答案肯定是"是"。

当然,首先检查您的文本是否有效的 UTF-8 总是存在一个问题......