Unicode下CString转UTF-8,再转UTF-8的%形式

 CString str(_T("我是中国人"));
 CT2A szUtf8(str,CP_UTF8);
 string s_utf8(szUtf8);
 CString strRet;
 //转换成URL encode
 ConvertStringToURLCoding(strRet,s_utf8.c_str(),s_utf8.length

 //
BOOL ConvertStringToURLCoding(CString &strDest, const char* strUTF8, int iLength)
{
	strDest.Empty();
	CString strTemp;
	int i = 0;
	while(i < iLength)
	{
		if ((unsigned)strUTF8[i] <= (unsigned char)0x7f)
		{ 
			//字母和数字不转换
			if ((strUTF8[i] >= '0' && strUTF8[i] <= '9') || 
				(strUTF8[i] >= 'A' && strUTF8[i] <= 'Z') ||
				(strUTF8[i] >= 'a' && strUTF8[i] <= 'z')||
				(strUTF8[i]>=8 && strUTF8[i]<=14)||
				strUTF8[i]==42||
				strUTF8[i] =='@'||
				strUTF8[i] =='_')
			{

				strDest += (TCHAR)strUTF8[i];
			}
			else if (strUTF8[i] == ' ')    //空格转换成+号
			{
				strDest += _T('+');
			}
			else    //其他标点符号
			{
				strTemp.Format(_T("%%%02X"), (unsigned char)strUTF8[i]);
				strDest += strTemp;
			}
			i++;
		}
		else
		{        //汉字或者其他的uft8文字,每3个字节一转
			strTemp.Format(_T("%%%02X%%%02X%%%02X"), (unsigned char)strUTF8[i], 
				(unsigned char)strUTF8[i + 1], (unsigned char)strUTF8[i + 2]);
			strDest += strTemp;
			i += 3;
		}
	}
	if (i == 0)
	{
		return FALSE;
	}
	return TRUE;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值