UTF8與ANSI互轉


在取回的結果中,如果有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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM