包含中文的URL或者文件路径的编解码

这里的内容是处理%xx之类的东西!是"解码"过程。
比如网站请求服务器的某些资源带有中文,或者linux系统某些文件中记录的文件名中含有中文都会变为诸如%xx的,可以对其“解码”获取中文

void strdecode(char *to, char *from)
{
    for ( ; *from != '\0'; ++to, ++from) 
    {
        if (from[0] == '%' && isxdigit(from[1]) && isxdigit(from[2]))
        { 
            *to = hexit(from[1])*16 + hexit(from[2]);
            from += 2;
        } 
        else
            *to = *from;
    }
    *to = '\0';
}
int hexit(char c)
{
    if (c >= '0' && c <= '9')
        return c - '0';
    if (c >= 'a' && c <= 'f')
        return c - 'a' + 10;
    if (c >= 'A' && c <= 'F')
        return c - 'A' + 10;

    return 0;
}

//“编码”,用作回写浏览器的时候,将除字母数字及/_.-~以外的字符转义后回写。
//strencode(encoded_name, sizeof(encoded_name), name);

void strencode(char* to, size_t tosize, const char* from)
{
    int tolen;

    for (tolen = 0; *from != '\0' && tolen + 4 < tosize; ++from) 
    {
        if (isalnum(*from) || strchr("/_.-~", *from) != (char*)0)
        {
            *to = *from;
            ++to;
            ++tolen;
        } 
        else 
        {
            sprintf(to, "%%%02x", (int) *from & 0xff);
            to += 3;
            tolen += 3;
        }
    }
    *to = '\0';
}

例如如下:/home/uos/.local/share/recently-used.xbel这个文件中的一部分内容(这个记录了双击打开过的文件记录)

而/home/uos/Desktop/%E6%88%AA%E5%9B%BE%E5%BD%95%E5%B1%8F_20201204111933.png进行URL解码后为/home/uos/Desktop/截图录屏_20201204111933.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值