CString s1 = TEXT("壁灯Test");
int ret = s1.Compare(TEXT("低压灯安全隔离变压器Test"));上面的代码,在VC 6中ret值为-1,这没有问题,但是在VC 2005中返回值居然是1?
VC 6用的是多字节字符集,VC 2005用了Unicode。
是什么原因呢?请指教,谢谢!

解决方案 »

  1.   

    壁灯:DAB5C6
    低压:E4BD8EE58E8BE4比DA大。
      

  2.   

    谢谢回复,我在此方面理解不够深入。
    但是,如果我想在VC 2005中得到和VC 6中同样的结果,应该如何处理呢?
    毕竟,从拼音排序来说,VC 6的结果是正确的。
      

  3.   

    哦,不好意思,我理解错误了
    刚才没贴全,
    UNICODE下,
    壁灯是:E5A381E781AF
    低压是:E4BD8EE58E8B
    ANSI下,
    壁灯是:B1DAB5C6
    低压是:B5CDD1B9字符串一般就是比较相等吧。要想结果一致,就需要两个编译器的字符集相同。VC2005可以设置多字节字符的。
    实在不行,就转一下字符集。
      

  4.   

    转成同一编码,然后比较
    CompareStringOrdinal()比如两个Unicode的字符串
      

  5.   

    壁灯:DAB5C6
    低压:E4BD8EE58E8BE4比DA大。 
      

  6.   

    哈哈,刚才我的这个例子弄错了,不能ansi跟unicode比较。
    四楼的数据才对,但奇怪的是,竟然ansi和unicode下真的相反:)
    如果确定要得到-1的结果,只能转成ansi后进行比较了。
      

  7.   

    感谢两位的回复,才弄明白Unicode字符集不是按照拼音顺序排列的。
    最后解决方案是转换到多字节字符集(char*)来比较。
    结贴。