<分区>
我希望能够遍历字符串中的所有 utf-8 字符。
假设所有代码点都有一个索引,第一个代码点的索引为 0,最后一个代码点的索引为 N。我希望迭代器能够向前跳转 X 个索引,并告诉我一个代码点的索引.
我想做类似于 http://www.nubaria.com/en/blog/?p=371 的事情,但我不确定如何迭代字节,以便迭代器始终引用合法 utf-8 代码点的开头。
<分区>
我希望能够遍历字符串中的所有 utf-8 字符。
假设所有代码点都有一个索引,第一个代码点的索引为 0,最后一个代码点的索引为 N。我希望迭代器能够向前跳转 X 个索引,并告诉我一个代码点的索引.
我想做类似于 http://www.nubaria.com/en/blog/?p=371 的事情,但我不确定如何迭代字节,以便迭代器始终引用合法 utf-8 代码点的开头。
最佳答案
警告:此方法仅在您已经知道您的字节包含干净的 UTF-8 时才有效。如果存在格式错误或无效的字符,它将无法正常工作。
UTF-8 编码代码点的第二个到最后一个字节的位序列始终为 10xxxxxx。跳过这些,您将进入下一个代码点的开头。
for (int i=0; i<X && *p!=0; ++i)
{
++p;
while ((*p & 0xc0) == 0x80) ++p;
}
*p!=0
是为了确保您不会越过字符串的末尾。
关于c++ - 如何遍历字符串中的所有 utf-8 代码点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18473209/