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;
}