iso-8859-1到gb2312或者转到utf-8也行雅!!

解决方案 »

  1.   

    建议先用 MultiByteToWideChar 把源转换为 UNICODE,再用 WideCharToMultiByte 将 UNICODE 转换为目标。其中第一次调用时使用的代码页为 28591,第二次用 936(GB2312)或者65001(UTF-8)。我没做实验。
      

  2.   

    //将UTF8字符串转换为gb2312
    void CLangConvert::ConvertUTF8toGB2312(CString str,_bstr_t& bstr)
    {
    int n=MultiByteToWideChar(CP_UTF8,0,str,str.GetLength(),NULL,0);
    WCHAR * pChar = new WCHAR[n+1];
    n=MultiByteToWideChar(CP_UTF8,0,str,str.GetLength(),pChar,n);
    pChar[n]=0;
    OLECHAR * pTempBuffer = pChar;
    BSTR strPassword = SysAllocString(pTempBuffer);
    _bstr_t aa (strPassword,FALSE);
    bstr=aa;
    SysFreeString(strPassword);
    delete []pChar;
    }
    //iso-8859-1到gb2312或者转到utf-8得情况类似
      

  3.   

    我试了两种方法怎么还是乱码亚?
    我的iso-8859-1的源码为02 81 D6 23对应的应该是一个gb2312的一个汉字
    方法1.
    tvb+off为02 81 D6 23首址,ttt为转换buffer,len+1为长度,temp就应该是gb码了把,但不对亚!
    MultiByteToWideChar(28591,0,(LPCSTR)(tvb+off),len+1,ttt,len+1);
    WideCharToMultiByte(936,0,ttt,len+1,temp,len+1,NULL,NULL);
    方法2.
    _bstr_t=aa;
    CString str=tvb+off;
    ConvertUTF8toGB2312(str,aa);
    不对亚!