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

你可能感兴趣的:(Web,linux,解码)