请问各位大虾,VC里如何将UTF-8转换成GB2312编码?

解决方案 »

  1.   

    1. 首先,搂住应该正确认识概念,所谓 GB2312 的字符串或者 utf8 字符串都是指 char[] 数据,而不是 wchar_t[] 数据。 wchar_t 数据时 UNICODE 字符串,不存在编码问题。2. UTF-8转换成GB2312 的过程: char[](utf8) => wchar_t[](UNICODE) => char[](GB2312)
    转换的函数是: MutltByteToWideChar 和 WideCharToMultByte3. 关于这些概念问题的完整描述,参见文章:
    http://www.regexlab.com/zh/encoding.htm
      

  2.   

    请问楼上的,VC里 MutltByteToWideChar 和 WideCharToMultByte 这两个函数如何使用?
      

  3.   

    void UTF_8ToUnicode(WCHAR* pOut,char *pText)
          {
           char* uchar = (char *)pOut;
         
           uchar[1] = ((pText[0] & 0x0F) << 4) + ((pText[1] >> 2) & 0x0F);
           uchar[0] = ((pText[1] & 0x03) << 6) + (pText[2] & 0x3F);
         
           return;
          }  void UnicodeToGB2312(char* pOut,unsigned short uData)
         {
         WideCharToMultiByte(CP_ACP,NULL,&uData,1,pOut,sizeof(WCHAR),NULL,NULL);
         return;
         }     void UTF_8ToGB2312(CString &pOut, char *pText, int pLen)
    {
     char * newBuf = new char[pLen];
     char Ctemp[4];
     memset(Ctemp,0,4);  int i =0;
     int j = 0;
     
     while(i < pLen)
     {
      if(pText[i] > 0)
    {
    newBuf[j++] = pText[i++];
    }
    else                 
    {
    WCHAR Wtemp;
    UTF_8ToUnicode(&Wtemp,pText + i);

    UnicodeToGB2312(Ctemp,Wtemp);
        
    newBuf[j] = Ctemp[0];
    newBuf[j + 1] = Ctemp[1]; i += 3;    
    j += 2;   
    }
     }
     newBuf[j] = '\0';
     
     pOut = newBuf;
     delete []newBuf;
     
     return; 
    }在调用UTF_8ToGB2312方法时,原来UTF8编码的值经过此方法处理变成问号,请各位帮忙看看这个方法哪有误...