当前位置: 代码迷 >> VC/MFC >> WiFi的ESSID如果是中文, 怎么正常在程序里显示
  详细解决方案

WiFi的ESSID如果是中文, 怎么正常在程序里显示

热度:61   发布时间:2016-05-02 03:37:25.0
WiFi的ESSID如果是中文, 如何正常在程序里显示?
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
  相关解决方案