本帖最后由 VisualEleven 于 2011-02-24 08:43:39 编辑

解决方案 »

  1.   

    Unicode字符串应该有两个'\0'结尾吧,你一个不够。
      

  2.   

    应该不是这个原因,data[wcslen(data)]='\0'实际就是(unsigned short) data[19]=0,应该没错但字符串的长度确实发生了变化,貌似结束符'\0'的位置不对
    多插入两个消息框看看:
    Ucode_Acode(data,databuffer,true);
    MessageBoxW(NULL,data,0,0);
    data[wcslen(data)]='\0';
    AfxMessageBox(s);
      

  3.   

    用 atl 的
    W2A 宏
    具体用发见msdn
      

  4.   

    WCHAR *data=new WCHAR[];  这个是什么玩意。.....
      

  5.   

    char *databuffer=new char[];
    WCHAR *data=new WCHAR[];
    这两行没看懂!另外,你直接CString recData = databuffer;
    就完成转换了(当然,如果databuffer里面没有结束符的话,需要添加一个)。再者,为什么不贴Ucode_Acode的代码,从你已贴的代码看,只能是Ucode_Acode有问题了。再再者,你这行data[wcslen(data)]='\0';在干什么?
    wcslen函数就需要结束符,你如果能成功调用wcslen(并且返回值也正确),那说明已经有结束符了!
    如果你的data里面没有结束符,那么你上面那样赋结束符,当然是不行的,因为wcslen返回都是不确定的,非常有可能让你的程序断言或者崩溃(因为你还对data进行了写操作,可能会越界)。
      

  6.   

    WideCharToMultiByte();用这个将Unicode转多字节
      

  7.   

    将ANSI转换成Unicode时,如果不是用正确的函数进行转换,而是简单地用“=”进行赋值,当然会出错的。
    比如有两个ANSI字符“A”和“B”,收到后直接把它们赋值给一个Unicode的变量,程序就会把这个由“A”和“B”组成的字符串解释成单个Unicod字符。
      

  8.   

    那宏已经老了,用新的ATL转换类CW2A
    格式如下:
    CA2W=>MBCS 2 UNICODE
    CW2A=>UNICODE 2 MBCS
    CT2A=>TCHAR格式 2 MBCS
      

  9.   

    唉。。老老实实用MultyBytesToWideChar和WidecharToMultyBytes吧。