Hob*_*Ben 8 c string iteration utf-8
我使用这个函数的略微修改版本is_utf8 /sf/answers/72224141/从字符数组中提取UTF8序列,返回序列及其中的字节数,以便我可以在此处迭代字符串办法.
但是我现在想要在字符串()上向后迭代char *.做这个的最好方式是什么?
我的猜测是尝试将字符串的最后四个,三个,两个和一个字节分类为utf8(四次)并选择最长的字节.
但是,utf8是否具有暧昧的情况?例如可以aaaabb解析为aaaa.bb也可以(向后)解析为aa.aabb其中aa,aaaa,bb和aabb是有效的UTF8序列?
abl*_*igh 13
字符串由一系列UTF-8序列组成.所有UTF-8序列:
它只包含一个八位字节(你和我的字节),顶部位清晰
OR由一个八位字节组成,其中两个最高位设置,然后是一个或多个八位字节,第7位设置,第6位清除.
有关详细信息,请参见http://en.wikipedia.org/wiki/Utf8#Description.
所以你需要做的是检查相关字符是否有第7位和第6位清除,如果是这样,请退一步,注意不要超出字符串的开头(请注意,如果字符串格式正确,这不会发生).
未经测试的C-ish伪代码:
char *
findPrevious (const char *ptr, const char *start)
{
do
{
if (ptr <= start)
return NULL; /* we're already at the start of the string */
ptr--;
} while ((*ptr & 0xC0) == 0x80);
return ptr;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |