c++ 在不了解UTF-8编码的情况下,在空白字符上拆分UTF-8编码的字符串

yebdmbv4  于 2023-11-19  发布在  其他
关注(0)|答案(2)|浏览(99)

我想在每一个空白字符处分割一个字符串(' ','\n','\r','\t','\v','\f')字符串以UTF8编码存储在字节数组中(例如,char* 或vector或string)
我可以在每个拆分字符处拆分字节数组吗?如果不是这样,我确定在多字节字符中找不到与这些字符对应的字节值吗?通过查看UTF-8规范,似乎所有多字节字符都只有大于128的字节。
谢谢

pgvzfuti

pgvzfuti1#

你可以的
多字节序列必须包含一个前导字节(两个MSB等于11)和一个或多个延续字节(两个MSB等于10)。多字节序列的总长度(前导字节+延续字节)等于前导字节中在第一位0出现之前等于1的MSB计数的数目(例如:如果前导字节是110xxxxx,则后面应该正好有一个连续字节;如果是11110xxx,则应该正好有三个连续字节)。
所以,如果你发现短的MB序列或者没有前导字节的离散的continuationb字节,那么你的字符串可能是无效的,你的分割过程可能不会比它已经存在的更进一步。
但有一点你可能需要注意:Unicode在非ASCII兼容的上限范围内引入了其他“空白”符号。你可能需要相应地对待它们。

4c8rllxm

4c8rllxm2#

如果您将自己限制在您提到的空白字符集,那么答案肯定是“是”。
当然,首先总是有一个检查文本是否有效的UTF-8的问题。

相关问题