如果我有一些字符串要在 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/