我想在每一个空白字符处分割一个字符串(' ','\n','\r','\t','\v','\f')字符串以UTF8编码存储在字节数组中(例如,char* 或vector或string)我可以在每个拆分字符处拆分字节数组吗?如果不是这样,我确定在多字节字符中找不到与这些字符对应的字节值吗?通过查看UTF-8规范,似乎所有多字节字符都只有大于128的字节。谢谢
pgvzfuti1#
你可以的多字节序列必须包含一个前导字节(两个MSB等于11)和一个或多个延续字节(两个MSB等于10)。多字节序列的总长度(前导字节+延续字节)等于前导字节中在第一位0出现之前等于1的MSB计数的数目(例如:如果前导字节是110xxxxx,则后面应该正好有一个连续字节;如果是11110xxx,则应该正好有三个连续字节)。所以,如果你发现短的MB序列或者没有前导字节的离散的continuationb字节,那么你的字符串可能是无效的,你的分割过程可能不会比它已经存在的更进一步。但有一点你可能需要注意:Unicode在非ASCII兼容的上限范围内引入了其他“空白”符号。你可能需要相应地对待它们。
11
10
110xxxxx
11110xxx
4c8rllxm2#
如果您将自己限制在您提到的空白字符集,那么答案肯定是“是”。当然,首先总是有一个检查文本是否有效的UTF-8的问题。
2条答案
按热度按时间pgvzfuti1#
你可以的
多字节序列必须包含一个前导字节(两个MSB等于
11
)和一个或多个延续字节(两个MSB等于10
)。多字节序列的总长度(前导字节+延续字节)等于前导字节中在第一位0出现之前等于1的MSB计数的数目(例如:如果前导字节是110xxxxx
,则后面应该正好有一个连续字节;如果是11110xxx
,则应该正好有三个连续字节)。所以,如果你发现短的MB序列或者没有前导字节的离散的continuationb字节,那么你的字符串可能是无效的,你的分割过程可能不会比它已经存在的更进一步。
但有一点你可能需要注意:Unicode在非ASCII兼容的上限范围内引入了其他“空白”符号。你可能需要相应地对待它们。
4c8rllxm2#
如果您将自己限制在您提到的空白字符集,那么答案肯定是“是”。
当然,首先总是有一个检查文本是否有效的UTF-8的问题。