求 decodeURI 的C++实现 大神们

GW786228836 2014-06-03 10:38:14
RT,js传入一个encodeURI的字符串 ,我需要解码
...全文
214 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-06-04
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <windows.h>
#include <locale.h>
const int MAXL=1024;
char s[]="D:%5C%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99%5Cdoc.rar";
char ss[MAXL];
wchar_t ws[MAXL];
char *p;
int i,v,r,n;
int main() {
    p=s;
    i=0;
    while (1) {
        r=sscanf(p,"%%%2X%n",&v,&n);
        if (1==r) {
            ss[i]=(char)v;
            p+=n;
        } else if (0==r) {
            ss[i]=p[0];
            p++;
        } else break;
        i++;
        if (i>=MAXL-1) break;
    }
    ss[i]=0;
    n=i+1;
    MultiByteToWideChar(CP_UTF8, 0, ss, n, ws, MAXL);
    setlocale(LC_ALL,"chs");
    wprintf(L"[%s]\n",ws);
    return 0;
}
//[D:\学习资料\doc.rar]
//
GW786228836 2014-06-04
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
#include <stdio.h>
#include <windows.h>
#include <locale.h>
const int MAXL=1024;
char s[]="D:%5C%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99%5Cdoc.rar";
char ss[MAXL];
wchar_t ws[MAXL];
char *p;
int i,v,r,n;
int main() {
    p=s;
    i=0;
    while (1) {
        r=sscanf(p,"%%%2X%n",&v,&n);
        if (1==r) {
            ss[i]=(char)v;
            p+=n;
        } else if (0==r) {
            ss[i]=p[0];
            p++;
        } else break;
        i++;
        if (i>=MAXL-1) break;
    }
    ss[i]=0;
    n=i+1;
    MultiByteToWideChar(CP_UTF8, 0, ss, n, ws, MAXL);
    setlocale(LC_ALL,"chs");
    wprintf(L"[%s]\n",ws);
    return 0;
}
//[D:\学习资料\doc.rar]
//
大神 你太牛掰了
赵4老师 2014-06-03
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#include <string.h>
#include <locale.h>
char s[]="%26nbsp%3B%u5BF9%u65B9%u7B54%u590D";
char *p;
int i,j,r,n,v;
wchar_t w1[100];
wchar_t *pw;
void urldecode() {
    p=s;
    i=0;
    while (1) {
        r=sscanf(p,"%%%2X%n",&v,&n);
        if (r==EOF) break;
        if (r==1) {
            w1[i]=(wchar_t)v;
            p+=n;
            i++;
        } else {//r==0
            r=sscanf(p,"%%u%4X%n",&v,&n);
            if (r==EOF) break;
            if (r==1) {
                w1[i]=(wchar_t)v;
                p+=n;
                i++;
            } else {//r==0
                w1[i]=(wchar_t)p[0];
                p++;
                i++;
            }
        }
    }
}
void wstrrep(wchar_t *a,wchar_t b) {
    pw=w1;
    while (1) {
        pw=wcsstr(pw,a);
        if (pw) {
            memmove(pw+1,pw+wcslen(a),2*(wcslen(pw)-wcslen(a)+1));
            pw[0]=b;
        } else break;
    }
}
void htmldecode() {
    wstrrep(L" ",L' ');
    wstrrep(L"&",L'&');
    wstrrep(L""",L'\"');
    wstrrep(L"<",L'<');
    wstrrep(L">",L'>');
}
int main() {
    _wsetlocale(LC_ALL,L"chs");
    urldecode();
    wprintf(L"[%s]\n",w1);
    htmldecode();
    wprintf(L"[%s]\n",w1);
    return 0;
}
//[ 对方答复]
//[ 对方答复]
//
GW786228836 2014-06-03
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
搜“UTF8转Unicode”
为啥要 转 Unicode 在哪里用?
赵4老师 2014-06-03
  • 打赏
  • 举报
回复
赵4老师 2014-06-03
  • 打赏
  • 举报
回复
搜“UTF8转Unicode”
GW786228836 2014-06-03
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
仅供参考
#include <stdio.h>
#include <string.h>
#include <locale.h>
char s[]="%26nbsp%3B%u5BF9%u65B9%u7B54%u590D";
char *p;
int i,j,r,n,v;
wchar_t w1[100];
wchar_t *pw;
void urldecode() {
    p=s;
    i=0;
    while (1) {
        r=sscanf(p,"%%%2X%n",&v,&n);
        if (r==EOF) break;
        if (r==1) {
            w1[i]=(wchar_t)v;
            p+=n;
            i++;
        } else {//r==0
            r=sscanf(p,"%%u%4X%n",&v,&n);
            if (r==EOF) break;
            if (r==1) {
                w1[i]=(wchar_t)v;
                p+=n;
                i++;
            } else {//r==0
                w1[i]=(wchar_t)p[0];
                p++;
                i++;
            }
        }
    }
}
void wstrrep(wchar_t *a,wchar_t b) {
    pw=w1;
    while (1) {
        pw=wcsstr(pw,a);
        if (pw) {
            memmove(pw+1,pw+wcslen(a),2*(wcslen(pw)-wcslen(a)+1));
            pw[0]=b;
        } else break;
    }
}
void htmldecode() {
    wstrrep(L" ",L' ');
    wstrrep(L"&",L'&');
    wstrrep(L""",L'\"');
    wstrrep(L"<",L'<');
    wstrrep(L">",L'>');
}
int main() {
    _wsetlocale(LC_ALL,L"chs");
    urldecode();
    wprintf(L"[%s]\n",w1);
    htmldecode();
    wprintf(L"[%s]\n",w1);
    return 0;
}
//[ 对方答复]
//[ 对方答复]
//
不行哎 大神 我的 这个解不出来 D:%5C%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99%5Cdoc.rar D:\学习资料\doc.rar

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧