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

标签 c++ string encoding utf-8 split

我想在每个空白字符处拆分一个字符串 (' ', '\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/

相关文章:

c++ - 使用 lib 和 dll 文件隐藏实现?

java - Java 中的字符串格式化

C - 将 2 个 2D 字符串数组组合并更改为更大的 2D 数组的最简单方法

java - 使用 Java 构建的 XML 中的 UTF-8

c# - 编码问题?

encoding - 如何在使用 ffmpeg 进行实时 rtmp 发布期间自适应地将编码比特率更改为带宽?

c++ - 从 Windows 上的 Visual Studio 2013 到 Ubuntu 交叉编译 C++ OpenCV

c++ - 类构造函数上 boost::shared_ptr 的默认值

c++ - 模拟后从映射的驱动器号获取 UNC 路径

C++ 字符串数组二分查找