vc ++如何解码url

时间:2014-12-30 09:17:07

标签: winapi url visual-c++

应用程序从客户端的XMLHttpRequest接收看起来像(http://127.0.0.1:8000/?type%3DGCPrint%26get%3DPaperNames%3A%E9%BB%98%E8%AE%A4%E6%89%93%E5%8D%B0%E6%9C%BA)的请求。 url由encodeURI()或encodeURIComponent()用javascript编码 如何才能正确获取规范表格网址? 我已到达sdk并跟随demo,但结果不正确,网址的最后一部分是中文字符。
这是我的测试代码

void UrlDecode()
{
    wstring url = L"http://127.0.0.1:8000/?type%3DGCPrint%26get%3DPaperNames%3A%E9%BB%98%E8%AE%A4%E6%89%93%E5%8D%B0%E6%9C%BA";

    DWORD bufSize = url.size()+1;
    wstring buffer(url.size()+1, L'\0');

    HRESULT hr = UrlCanonicalize(url.c_str(), &buffer[0], &bufSize, URL_UNESCAPE|URL_ESCAPE_UNSAFE);

    if (SUCCEEDED(hr))
    {
        wcout.imbue(locale(""));
        wcout<<buffer;
    }   
}

int _tmain(int argc, _TCHAR* argv[])
{
    UrlDecode();    
    //system("pause");  
    return 0;
}

结果是 result result

1 个答案:

答案 0 :(得分:0)

@RC Brand @enhzflep感谢你的帮助。
我尝试了UriParser,但也存在一些编码问题 最后我发现code snippnet,它对我有用 首先,使用CP_UTF8将url转换为MultiByte字符串(murl) 然后,使用函数murl解码urldecode,获取已解码的网址durl 最后,使用CP_UTF8将durl转换为WideChar。