一个MBCS字符串转换成unicode,比如"中国",ANSI版本是0xd6,0xd0,0xb9,0xf9,转换成UNICODE应该是0xd0d6,0xf9b9,可我用MultiByteToWideChar转换出来的结果却是0x00d6,0x00d0,0x00b9,0x00f9,结果出来自然是乱码,请问大家正确的做法,我想过用手工转,但是除了汉字还得支持别的语言,所以只能用系统的函数,注:我用的是英文系统。我的代码如下:
WCHAR szWideProgID[256];
long lLen = MultiByteToWideChar(CP_ACP,0,pMsg->szText,strlen(pMsg->szText),szWideProgID,sizeof(szWideProgID));
szWideProgID[lLen] = _T('\0');
WCHAR szWideProgID[256];
long lLen = MultiByteToWideChar(CP_ACP,0,pMsg->szText,strlen(pMsg->szText),szWideProgID,sizeof(szWideProgID));
szWideProgID[lLen] = _T('\0');
串当作英文字符处理了,所以结果就是这个样子。你需要先调用 SetThreadLocale() 把当前线程
的 ACP 设置为中文,再调用 MultiByteToWideChar,并把 CP_ACP 改为 CP_THREAD_ACP。
WCHAR wz[256];char chs[3] = {0,0,0};
chs[0] = wz[0]>>8
chs[1] = wz[0]&0x00FF;
CString str(chs);
假定你现在的字符串是0xd6,0xd0,0xb9,0xf9
WCHAR wz[256];
wz[0] = 0xd0;
wz[0] = (wz[0] << 8) | 0xd6;
这样难道不行吗?