CString s2utfs(const wstring& strSrc) { string strRes; wstring wstrUni = strSrc; char* chUTF8 = new char[wstrUni.length() * 3]; memset(chUTF8,0x00,wstrUni.length() * 3); CString strName = Uni2UTF(wstrUni,chUTF8, wstrUni.length() * 3); strRes = chUTF8; delete []chUTF8; return strName; } CString URLEncode( const wstring& strRes, char *utf8, int nMaxSize ) { if (utf8 == NULL) { return L""; } CString strName; int len = 0; int size_d = nMaxSize; for (wstring::const_iterator it = strRes.begin(); it != strRes.end(); ++it) { wchar_t wchar = *it; if (wchar < 0x80) { strName += wchar; continue; } else if(wchar < 0x800) { if (len + 1 >= size_d) return L""; utf8[len++] = 0xc0 | ( wchar >> 6 ); utf8[len++] = 0x80 | ( wchar & 0x3f ); } else if(wchar < 0x10000 ) { if (len + 2 >= size_d) return L""; utf8[len++] = 0xe0 | ( wchar >> 12 ); utf8[len++] = 0x80 | ( (wchar >> 6) & 0x3f ); utf8[len++] = 0x80 | ( wchar & 0x3f ); } else if( wchar < 0x200000 ) { if (len + 3 >= size_d) return L""; utf8[len++] = 0xf0 | ( (int)wchar >> 18 ); utf8[len++] = 0x80 | ( (wchar >> 12) & 0x3f ); utf8[len++] = 0x80 | ( (wchar >> 6) & 0x3f ); utf8[len++] = 0x80 | ( wchar & 0x3f ); } char *q = new char[40]; char *p = utf8; for (int i = 0;i < 3;i++) { char *q = new char[40]; sprintf(q,"%x",*p++); strName += "%"; strName += q; } len = 0; } strName.Replace(L"ffffff",L""); return strName; }