利用BOOST库实现最简单的UrlEncode

来源:互联网 发布:excel防止数据丢失 编辑:程序博客网 时间:2024/05/16 03:10

最近在做的一个项目,需要通过URL向服务器提交中文字符

例如:http://192.168.0.1/myServers/willdo?want=想做点事

网上找了一堆的C++ 有关URLEncode,都写得复杂看得更复杂.

其实产URLENCODE后的%XX%XX就是字符的UTF编码的16进制数;

示例代码(在VS2013通过)


#ifdef UNICODE#define STRING std::wstring#define CCHAR wchat_t#endifCString CMainWndDlg::UrlEncode(CString srcString){STRING strTmp= _T(" ");//字符窜前面加空格,如果不加,第一个字符encode后会变成0;strTmp += srcString.GetBuffer();std::string tmp = boost::locale::conv::from_utf<CCHAR>(strTmp, "UTF-8");int len = tmp.length();CString strRet;strRet.Empty();for (int nIndex = 1; nIndex < len; nIndex++){BYTE nCode = (BYTE)tmp[nIndex];CCHAR cCode[3];_itow(nCode, cCode, 16);strRet += _T("%");strRet += cCode;memset(cCode, 0, sizeof(CCHAR) * 3);}return strRet;}

注:不知为什么,第一个字符转换后总是0,可能是BOOST库的BUG.

所以在整个字符窜前加个空格再进行encode就正确了.所以我们解释是从第2个字符(也就是tmp[1]开始,最后一个\0不解释);



1 0
原创粉丝点击