一个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'); 

解决方案 »

  1.   

    你不应该用 CP_ACP 参数,他在中文系统上代表中文,在英文系统上则代表英文,系统把你的输入
    串当作英文字符处理了,所以结果就是这个样子。你需要先调用 SetThreadLocale() 把当前线程
    的 ACP 设置为中文,再调用 MultiByteToWideChar,并把 CP_ACP 改为 CP_THREAD_ACP。
      

  2.   

    上解有错。不用调用 SetThreadLocale() 。把 CP_ACP 改成 936 就可以了。
      

  3.   

    手工转为CString
    WCHAR wz[256];char chs[3] = {0,0,0};
    chs[0] = wz[0]>>8
    chs[1] = wz[0]&0x00FF;
     
    CString str(chs);
      

  4.   

    不必用什么MultiByteToWideChar啦!
    假定你现在的字符串是0xd6,0xd0,0xb9,0xf9
    WCHAR wz[256];
    wz[0] = 0xd0;
    wz[0] = (wz[0] << 8) | 0xd6;
    这样难道不行吗?