1. 开发环境: VC6+WINPCAP+Airpcap网卡. 编码采用默认的MBCS模式.
2. 使用airodump的处理分析流程来打印WIFI AP的相关信息. 其他相关信息都OK.
3. 唯独无法正确显示中文ESSID. 比如"Free?. iPhone", 实际上对应的应该是"Free的 iPhone"
考虑到默认编码为MBCS, 我就想到先转UNICODE, 在转回MBCS字符来显示的思路. 但是好像不起作用:
void wifiessidstr_conve(char *szBuf,DWORD BuffLen,int sourceCodepage, int targetCodepage)
{
if(!strcmp(szBuf, ""))
return;
int nStrLen = strlen(szBuf);
wchar_t *pUnicode = new wchar_t[nStrLen + 1];
int nReturn = MultiByteToWideChar(sourceCodepage, 0, szBuf, nStrLen, pUnicode, nStrLen + 1);
BOOL bValue = false;
memset(szBuf,0,BuffLen);
int nReturn2 = WideCharToMultiByte(targetCodepage, 0, pUnicode, nReturn, szBuf, BuffLen, "?", &bValue);
if(nReturn2)
{
szBuf[nReturn2] = 0;
}
else
{
szBuf[BuffLen] = 0;
}
delete[] pUnicode;
}
wifiessidstr_conve((char *)ap_cur->essid,MAX_IE_ELEMENT_SIZE,CP_ACP,GetACP());
不知我的思路还是代码有问题, 还是无法得到我想要正确显示的中文字符. 特来请教大家.
------解决思路----------------------
Free?. iPhone
返回的数据应该是utf8的格式吧
------解决思路----------------------
可能是UTF8格式,尝试用MultiByteToWideChar转换,注意第一个参数要用CP_UTF8