读书人

继续询问一下编码有关问题发了两个帖

发布时间: 2012-05-22 18:18:54 作者: rapoo

继续询问一下编码问题,发了两个帖子了。之前问题未解决,新的疑问
之前的帖子说我收到的一段报文是Unicode编码的。
我将报文对应的Hex串(调试时,内存看到的串),用工具直接转为Ascii串,可以正常显示。 //疑问???
为什么我使用API函数将报文从Unicode编码转为Ascii编码就显示乱码呢、、
再贴一下之前的代码了:
wchar_t Unicode[256];
memcpy(Unicode, pArry, 256); //BYTE pArry[]保存收到的那段报文。如下:00310035003900360032003900370036003700370036003a0020005400680065002000420061006c0061006e006300650020006900730020006e006f007400200065006e006f00750067006800200066006f007200200079006f0075007200200073006500720076006900630065002c00200050006c00650061007300650020006300680061

int nLen = ::WideCharToMultiByte(CP_ACP, NULL, Unicode, wcslen(Unicode), NULL, 0, NULL, NULL);
char* pOut = new char[256];
memset(pOut , 0, 256);

//sprintf(szU8, "%S", Unicode);

::WideCharToMultiByte(CP_ACP, NULL, Unicode, wcslen(Unicode), pOut, nLen, NULL, NULL);

pOut[nLen] = '\0';

CString sInfo;
sInfo.Format("Short Message:%s", pOut); //输出总是显示乱码、、快崩溃了。。
WriteLog(LL_INFO, sInfo);
if (pOut)
{
delete [] pOut;
pOut = NULL;
}

[解决办法]
又是你,还没解决。
首先你要确定你收到的报文是什么编码。
例如:http的是utf-8,utf-8只能转成unicode,然后unicode再转ascii。
你上面的写法,貌似收到的就是unicode,然后你再转ascii,但是貌似不会收到的就是unicode
[解决办法]
Unicode编码不应该通过网络传输,因为会受到大小端影响,不知道楼主是否受此影响。

另外,楼主对编码的理解有点混点。

WINDOWS默认终端是GBK编码吧,如果想输出到终端不乱码的话,需要把UNICODE转成GBK输出到终端。

读书人网 >C++

热点推荐