在取回的結果中,如果有Unicode字符,用printf來打印的話,則會出現亂碼。
通過這個方法,可以判斷是否為unicode字符,是的話,通過wprintf來打印。
1、判斷字符串是否為Unicode的方法
不用判斷,在xmlhttp.send中發送的代碼都經過utf8編碼
2、將UTF8轉化為ANSI編碼的方法,
UTF8中一個中文字有三個字節去表示,而ANSI中一個中文字是二個字節表示。
BOOL Utf8ToAnsi(LPCSTR lpcszStr, char* lpwszStr, DWORD dwSize)
{
DWORD dwMinSize;
WCHAR* strTmp ;
dwMinSize = MultiByteToWideChar (CP_UTF8, 0, lpcszStr, -1, NULL, 0);
strTmp = new WCHAR[dwMinSize];
if(dwSize < dwMinSize)
{
return FALSE;
}
MultiByteToWideChar (CP_UTF8, 0, lpcszStr, -1, strTmp, dwMinSize);
int targetLen=WideCharToMultiByte(CP_ACP,0,(LPWSTR)strTmp,-1,(char *)lpwszStr,0,NULL,NULL);
WideCharToMultiByte(CP_ACP,0,(LPWSTR)strTmp,-1,(char *)lpwszStr,targetLen,NULL,NULL);
return TRUE;
}
int AnsiToUtf8()//測試
{
char str [ 256 ] = "c 的目錄" ; //一段UTF-8編碼
WCHAR* strA;
int i= MultiByteToWideChar ( CP_ACP , 0 ,(char*) str ,-1 ,NULL,0);
strA = new WCHAR[i];
MultiByteToWideChar ( CP_ACP , 0 ,( char * ) str, -1, strA , i);
i= WideCharToMultiByte(CP_UTF8,0,strA,-1,NULL,0,NULL,NULL);
char *strB=new char[i];
WideCharToMultiByte (CP_UTF8,0,strA,-1,strB,i,NULL,NULL);
//strB即為所求
return 0;
}