关于utf数据格式的字符串转化成Ansi字符串的问题。MSDN没仔细看,网上找找又是一头雾水。也在csdn中也找了很久,就是没有明显的答案,有分析编码方式的,有java代码的,有说到用这个函数的。
其实很简单,就像一层纸,没破就是不太懂。下面是代码:
void Utf8ToAnsi( CString str )
{
LPWSTR lpszW = new WCHAR[1024]; LPTSTR lpStr = str.GetBuffer( str.GetLength() );
int nLen = MultiByteToWideChar(CP_ACP, 0,lpStr, -1, NULL, NULL);
MultiByteToWideChar(CP_UTF8, 0, lpStr, -1, lpszW, nLen); WideCharToMultiByte(CP_ACP, 0, lpszW, nLen, str2.GetBuffer(1024), 1024, NULL, NULL );
delete[] lpszW;
str.ReleaseBuffer();
}

解决方案 »

  1.   

    写规范一点,不知为何:delete[] lpsz会报错;void Rtf8ToAnsi( CString &strData, int nBuf = 1024 )
    {
    LPWSTR lpsz = NULL;
    CString strPart;
    CString strItem, str;
    int nLen;
    LPTSTR lpStr = NULL; lpsz = new unsigned short[1024];
    while( !strData.IsEmpty() )
    {
    strPart = strData.Left( nBuf );
    strData.Delete( 0, strPart.GetLength() ); lpStr = strPart.GetBuffer( strPart.GetLength() );
    nLen = MultiByteToWideChar( CP_ACP, 0, lpStr, -1, NULL, NULL );

    memset( lpsz, 0, nBuf*2 );
    MultiByteToWideChar( CP_UTF8, 0, lpStr, -1, lpsz, nLen ); lpStr = strItem.GetBuffer( nBuf );
    WideCharToMultiByte(CP_ACP, 0, lpsz, nLen, lpStr, nBuf, NULL, NULL );
    strItem.ReleaseBuffer();
    str += strItem;
    }
    //delete[] lpsz                          ????? strData = str;
    }