如题:
我收到的数据是 Utf8的数据。
四字节:
BYTE pdata[]={0x44,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x75,0x00,0x00,0x00};
2007年的旧贴中,有一解题方法:
http://topic.csdn.net/u/20070522/20/5150F907-2B2F-4B8E-B1F2-716767001FEA.html
这个是采用手工,三字节合并的。不是用系统 MultiByteToWideChar 实现的。我想问,MultiByteToWideChar 这个不能逆回来吗?我的代码:
int CToolFun::AnsistrToWidestr(char *pIn,wchar_t *pOut, int noutsize)
{
int nc=MultiByteToWideChar(CP_UTF8,0,pIn,-1,NULL,0);
if (nc>0) {
nc = MultiByteToWideChar(CP_UTF8,0,pIn,-1,pOut,noutsize);
}
return nc;
}
解出来的,是8字节长度的数据。也就是一个 0x44,00,00,00 变成了 0x44,00,00,00,00,00,00,00
晕啊,这是什么东西啊

解决方案 »

  1.   

    要变换2次:
    if(m_UTF8)
    {// utf8 file
    MultiByteToWideChar(CP_UTF8,0,szBuf,-1,wBuf,2048);// utf8到unicode
    WideCharToMultiByte(CP_ACP,0,wBuf,-1,szBuf,2048,0,0);//unicode到mbcs
    pLine=szBuf;
    }
      

  2.   

    我一直以为 UTF-8 就是宽字符呢?
      

  3.   

    多谢,我现在去试。
    我不知道,我那个四节字的编码,是不是utf32的哦?
      

  4.   

    “收到的数据是 Utf8的数据”不对!
    /*
    EF BB BF    UTF-8  
    FE FF     UTF-16/UCS-2, little endian  
    FF FE     UTF-16/UCS-2, big endian  
    FF FE 00 00  UTF-32/UCS-4, little endian.  
    00 00 FE FF  UTF-32/UCS-4, big-endian.
    */
      

  5.   

    是这样滴,我要先把 utf32 转成 utf8 ,再用 二楼的办法,就OK了。#2楼 得分:0回复于:2012-05-10 18:52:56要变换2次:
    if(m_UTF8)
    {// utf8 file
    MultiByteToWideChar(CP_UTF8,0,szBuf,-1,wBuf,2048);// utf8到unicode
    WideCharToMultiByte(CP_ACP,0,wBuf,-1,szBuf,2048,0,0);//unicode到mbcs
    pLine=szBuf; 
    }
    //---------------------------------------------------
    当然,我的工程是Unicode 版的,所以只用 MtoW 第一步就OK了。
    谢了哈,现在去给分。