0

我希望能够遍历字符串中的所有 utf-8 字符。

想象一下,所有代码点都有一个索引,第一个代码点的索引为 0,最后一个代码点的索引为 N。我希望迭代器能够向前跳转 X 个索引并告诉我一个代码点的索引。

我想做类似于http://www.nubaria.com/en/blog/?p=371的事情,但我不确定如何迭代字节,以便迭代器始终引用合法 utf 的开头-8 个代码点。

4

1 回答 1

2

警告:此方法仅在您已经知道您的字节包含干净的 UTF-8 时才有效。如果存在格式错误或无效的字符,它将无法正常工作。

UTF-8 编码代码点的第二个到最后一个字节将始终具有 10xxxxxx 的位序列。跳过这些,您将在下一个代码点的开始。

for (int i=0; i<X && *p!=0; ++i)
{
    ++p;
    while ((*p & 0xc0) == 0x80) ++p;
}

那里是为了*p!=0确保你不会跑过字符串的末尾。

于 2013-08-27T20:36:46.847 回答