我想在每个空白字符处拆分一个字符串 (' ', '\n', '\r', '\t', '\v', '\f') 字符串以 UTF8 编码存储在字节数组中(例如 char*,或 vector 或字符串)
我可以在每个拆分字符处拆分字节数组吗?或者说,我确定在多字节字符中找不到这些字符对应的字节值吗?通过查看 UTF-8 规范,似乎所有多字节字符都只有大于 128 的字节。
谢谢
最佳答案
是的,你可以。
多字节序列必然包含一个前导字节(两个 MSB 等于 11
)和一个或多个连续字节(两个 MSB 等于 10
)。多字节序列的总长度(前导字节+连续字节)等于前导字节中等于 1 的 MSB 的计数,在第一个位 0 出现之前(例如:如果前导字节是 110xxxxx
,后面应该正好有一个连续字节;如果是11110xxx
,应该正好有三个连续字节)。
因此,如果您发现短 MB 序列或没有前导字节的杂散 continuationb 字节,则您的字符串可能无论如何都是无效的,并且您拆分过程可能不会比它可能已经存在的更糟。
但有一点您可能需要注意:Unicode 在较高的非 ASCII 兼容范围内引入了其他“空白”符号。您可能希望相应地对待它们。
关于c++ - 在不知道 UTF-8 编码的情况下拆分空白字符上的 UTF-8 编码字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26279114/