今天用UNICODE编译了BCGSoft.BCGControlBar.Professional.v6.74类库和示例程序BCGControls,运行发现日历控件CBCGPCalenderBar对于中文信息“星期×”、“×月”显示为乱码。开始我以为编译的有问题,重新检查后没有发现异常。然后我进入调试状态,跟踪错误信息发现是BCGPCalenderBar.cpp (Line 57)
BCGPDateTimeCtrl.cpp (Line 996)调用COleDateTime.Format时返回的字符串有问题,继续跟踪进入MFC的源代码,发现在调用mbstowcs时,将ANSI字符串转换为UNICODE字符串时出现问题,具体来说:无论对于英文字符或者数字这种单字节字符,还是汉字这些双字节字符,统统看作单字节字符,然后转换成UNICODE字符串!“星期一”在内存中是D0 C7 C6 DA D2 BB 00
转换后变成了D0 00 C7 00 C6 00 DA 00 D2 00 BB 00 00这样让我很迷惑,好歹写了几年的程序了,还从来没有碰到过这种事儿,难道真是微软MFC的Bug,又如何解决呢?我发现用_MBCS代替_UNICODE进行编译,运行结果一切正常,但我希望用_UNICODE编译啊……

解决方案 »

  1.   

    你可以在工程中同时支持_MBCS、_UNICODE,需要什么时可以用#ifdef #else #endif来判断啊
      

  2.   

    我也遇到过,没法。wcstombs 有时还不会错但mbstowcs每次都有问题,你可以考虑用MultiByteToWideChar函数,指定字符集(CodePage)。看有没有问题。这个函数有时也会转错。你要保证在你的字符串中没有不同字符集(CodePage)的字符
      

  3.   

    这个问题真是让人头痛,刚看到在BCGSoft的网站上也有人提出了这个问题……
      

  4.   

    唉,重新对UNICODE下的处理写了一段代码,利用条件编译,总算解决了,不过总觉得MFC里面有这样的问题,还一直没有得到解决真是不爽!