c++ - 在字符串中搜索 UTF-8 代码点时有什么注意事项吗?

标签 c++ unicode encoding utf-8 unicode-string

如果我有一些字符串要在 UTF-8 中搜索,另一个要搜索,同样在 UTF-8 中,对代码点进行直接比较搜索以查明匹配字符是否有任何注意事项?

根据 UTF-8 的工作方式,是否有可能出现误报?

我已经阅读了很多关于 UTF-8 有多棒的文档,但我无法形成一个证明来回答这个问题。

如果我向前搜索,那么我可以跳过代码点的长度;但它正在倒着走,这让我很担心。

不是向后走直到我到达代码点的开头,然后从该地址进行内存比较,而是简单地沿着每个字节向后走直到我得到与搜索字符串的完全匹配是否安全?

最佳答案

没有。这里没有警告;此操作在 UTF-8 中是完全安全的。

回想一下,UTF-8 使用两种一般形式表示字符:

  • ASCII 字符(U+0000 到 U+007F),全部使用 0x00-0x7F 范围内的单个字节逐字表示。

  • 所有其他字符,由一个序列表示,包括:

    • 前导字节,在 0xC2-0xF4 范围内,它对部分字符数据以及后续序列的长度进行编码。
    • 0x80-0xBF 范围内的一个或多个连续字节,对一个字符的剩余部分进行编码。

由于前导字节和连续字节之间没有重叠,因此不小心在多字节字符的中间开始搜索是可以的。您不会找到您的匹配项,因为您正在搜索的字符串不会以连续字节开头,但您也不会找到任何误报。

关于c++ - 在字符串中搜索 UTF-8 代码点时有什么注意事项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34868699/

相关文章:

c++ - C++ 新手,需要有用的示例

java - antlr3 unicode字符导致错误

python - "Broken"以 UTF-8 编码的 unicode 字符串?

php - 使用 PHP 解码 unicode 转义字符

java - "String Compact"给当前的JNI引入了一些性能问题,如何避免

c++ - 再次打开应用程序时如何显示应用程序 Qt

c++ - 使用类外部模板类中的 typedef 成员作为成员函数的返回类型

c++ - 替换 char* 中的字符

java - 从其编号创建 Unicode 字符

python - 将listdir()返回的字节转换为字节进行解码