首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字节数组的末尾移除UTF-8字符

从字节数组的末尾移除UTF-8字符
EN

Stack Overflow用户
提问于 2015-03-07 07:04:31
回答 1查看 297关注 0票数 1

我想从C中字节数组的末尾删除utf8字符

我尝试了下面的代码来移除字符,这段代码对于1或2个字节的字符很好,但是不适用于删除需要超过2字节空间的字符.

我有两个问题:

是否有更好的方法来实现这一点,以及如何修复当前的代码?

代码语言:javascript
复制
if( ((int)bytearray[counter-6]) >= 128 + 64 + 32 + 16 + 8 + 4 && strlen(bytearray) >= 6 )
            for (i=0;i<6;i++)
                bytearray[--counter] = (char) 0;
        else if( ((int)bytearray[counter-5]) >= 128 + 64 + 32 + 16 + 8 && strlen(bytearray) >= 5 )
            for (i=0;i<5;i++)
                bytearray[--counter] = (char) 0;
        else if( ((int)bytearray[counter-4]) >= 128 + 64 + 32 + 16  && strlen(bytearray) >= 4  )
            for (i=0;i<4;i++)
                bytearray[--counter] = (char) 0;
        else if( ((int)bytearray[counter-3]) >= 128 + 64 + 32 && strlen(bytearray) >= 3   )
            for (i=0;i<3;i++)
                bytearray[--counter] = (char) 0;
        else if( ((int)bytearray[counter-2]) >= 128 + 64 && strlen(bytearray) >= 2 )
            for (i=0;i<2;i++)
                bytearray[--counter] = (char) 0;
        else
            bytearray[--counter] = (char) 0;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-07 07:23:06

http://en.wikipedia.org/wiki/UTF-8#Description中,您可以发现每个UTF-8字符的开始字节要么是0xxxxxxx,要么是11xxxxxx。也就是说,开始字节永远不是10xxxxxx

因此,假设bytearraychar*char[]类型,那么您可以编写

代码语言:javascript
复制
for (counter = strlen(bytearray)-1; counter >= 0; --counter) {
    if ((bytearray[counter] & 0xC0) != 0x80) {
        // beginning byte of a character
        bytearray[counter] = '\0';
        break;
    }
    // consequent bytes. Clear and keep going.
    // Indeed this is optional since the first '\0' already terminates a C string
    bytearray[counter] = '\0';
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28912358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档