如何Unicode下,将CString转成UTF-8。
例如:
CString xx="您好"
CSting str=URLEnCode(xx);
转换后的结果:str的内容就是%e6%82
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
/////////////////////////......
答案就在这里:Unicode下CString转UTF-8,再转UTF-8的%形式
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?
char* UnicodeToUtf8(CString unicode)
{
int len;
len = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)unicode, -1, NULL, 0, NULL, NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8, 0, len * 2 + 2);
WideCharToMultiByte (CP_UTF8, 0, (LPCWSTR)unicode, -1, szUtf8, len, NULL,NULL);
return szUtf8;
}
#include "stdafx.h"
#include <iostream>
#include <atlstr.h> // for CString
#include <windows.h>
#include <lm.h>
using namespace std;
char* CreateUTF8TextInitWithString(CString strValue)
{
char *buffer = NULL;
int length;
#ifdef _UNICODE
length = WideCharToMultiByte(CP_UTF8, 0, strValue, -1, NULL, 0, NULL, NULL);
#else
return NULL;
#endif
if (length <= 0)
{
return NULL;
}
buffer = new char[length];
if (buffer == NULL)
{
return NULL;
}
ZeroMemory(buffer, length);
#ifdef _UNICODE
WideCharToMultiByte(CP_UTF8, 0, strValue, -1, buffer, length, NULL, NULL);
#else
strcpy_s(buffer, length, strValue);
#endif
return buffer;
}
BOOL CreateString_InitWithUTF8Text(CString& str, char* pUTF8Text)
{
if (NULL == pUTF8Text)
{
return FALSE;
}
int unicodeLen = ::MultiByteToWideChar( CP_UTF8,
0,
pUTF8Text,
-1,
NULL,
0 );
wchar_t* pUnicode = new wchar_t[unicodeLen+1];
if (NULL == pUnicode)
{
return FALSE;
}
MultiByteToWideChar( CP_UTF8, 0, pUTF8Text, -1, (LPWSTR)pUnicode, unicodeLen );
str = pUnicode;
delete []pUnicode;
return TRUE;
}
int _tmain()
{
// 转换 CString 到 utf-8编码
char* buff = CreateUTF8TextInitWithString(CString(TEXT("这都不是问题吧。")));
// 转换 utf-8 到 CString 编码
CString str;
if (CreateString_InitWithUTF8Text(str, buff))
{
cout << "successed... ";
}
delete []buff;
return 0;
}