UTF-8,gb2312等百分号编码进行解码示例

uft-8 及 gb2312对 数据编码时,保留 字符和数字的anscii 编码方式,但对汉字及特殊字符进程 百分号编码。其中utf-8中一个 汉字 占3个字节,gb2312 中占2个字节。

例如 "三" 进行utf-8 百分号编码,生成%E4%B8%89

在解码时,需加%后的2位16进制数转换为整数,放入响应数组位置即可。

代码示例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int unencode(char *src, char *dest)
{
    int code;

    for(; *src != '\0'; src++, dest++)
    {
        if(*src == '%')
        {
            if(sscanf(src+1, "%2x", &code) != 1)
                code = '?';
            *dest = code;
            src += 2;
        }
        else if(*src == '+')
            *dest = ' ';
	else
	    *dest = *src;
    }
    *dest = '\0';
    return 0;
}

char *src = "%E4%B8%89%E5%9B%BD%E6%BC%94%E4%B9%89";
char *dest;
char *res = "三国演义";

int main()
{
    int len = strlen(src);
    dest = (char *)malloc(len*sizeof(char) + 1);
    unencode(src, dest);
    printf("dest:%s\n", dest);
    printf("res len:%d, %s\n", strlen(res), res);
    if(0 == strcmp(dest, res))
        printf("equal\n");
    else
        printf("not equal\n");
    free(dest); //释放动态分配内存
    return 0;
}





运行结果:

dest:三国演义
res len:12, 三国演义
equal

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值