利用BOOST库实现最简单的UrlEncode

5 篇文章 0 订阅

最近在做的一个项目,需要通过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
#endif

CString 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不解释);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值