我希望能够遍历字符串中的所有utf-8字符。
想象一下,所有代码点都有一个索引,第一个代码点的索引为0,最后一个代码点的索引为N.我希望迭代器能够向前跳转X索引并告诉我代码点的索引。
我想做类似于http://www.nubaria.com/en/blog/?p=371的操作,但我不确定如何迭代字节,以便迭代器始终引用合法的utf-8代码点的开头。
答案 0 :(得分:1)
警告:此方法仅在您已知道您的字节包含干净的UTF-8时才有效。如果出现格式错误或无效的字符,它将无法正常工作。
UTF-8编码的代码点的倒数第二个字节始终具有10xxxxxx的位序列。跳过这些,你将会在下一个代码点的开头。
for (int i=0; i<X && *p!=0; ++i)
{
++p;
while ((*p & 0xc0) == 0x80) ++p;
}
*p!=0
用于确保您不会超过字符串的末尾。