Zhr*_*hro 2 c++ unicode encoding utf-8 unicode-string
如果我有一些字符串要在 UTF-8 中搜索,另一个要搜索,也在 UTF-8 中搜索,对代码点进行直接比较搜索以查明匹配字符有什么注意事项吗?
以 UTF-8 的工作方式,是否有可能得到误报?
我已经阅读了很多关于 UTF-8 有多棒的文档,但是我无法形成证据来回答这个问题。
如果我向前搜索,那么我可以跳过代码点的长度;但它是反向走绳子,这让我很担心。
不是向后走直到我到达代码点的开头然后从该地址进行内存比较,而是简单地沿着每个字节向后走直到我得到与搜索字符串的完全匹配是否安全?
小智 5
不。这里没有警告;此操作在 UTF-8 中是完全安全的。
回想一下,UTF-8 使用两种通用形式表示字符:
ASCII 字符(U+0000 到 U+007F),它们都使用范围内的单个字节字面表示0x00-0x7F。
所有其他字符,由一个序列表示,其中包括:
0xC2-0xF4,其编码字符数据的一部分,以及该序列的长度跟随。0x80-0xBF,用于对字符的剩余部分进行编码。由于前导字节和连续字节之间没有重叠,因此在多字节字符中间不小心开始搜索是可以的。您不会找到匹配项,因为您要搜索的字符串不会以连续字节开头,但您也不会发现任何误报。