最近在做一个搜索程序,已改成unicode编码,从一个edit控件中输入汉字,再从本地字库文件中查找该文件是否含有这个汉字,比如输入“总书记”,调用GetWindowText把输入的内容读到内存,通过监视,三个汉字内容为0x603b 0x4e66 0x8bb0,结果我在本地用ultraedit打开字库文件,发现“总书记”编码是0xd7dc 0xcae9 0xbcc7,与vc中获得不一样,根本比较不了,这是什么原因?求高手指教

解决方案 »

  1.   

    unicode:0x603b 0x4e66 0x8bb0
    ANSI:0xd7dc 0xcae9 0xbcc7说明字库文件是按照ansi编码存储的。要么把字库全部转换为unicode
    要么把输入的汉字转换为ANSI,再和字库内容进行比较。
      

  2.   

    请问GetWindowText以后如何再把汉字转化为ansi?对于汉字不是只能用unicode编码吗?
      

  3.   

    因为你的程序已经改成unicode编码,但是在简体中文字库采用多字节编码方式,因此你要进行unicode编码到多自己编码方式转换,有相应的转换函数的,可以在网上查一下,
      

  4.   

    // wcsBuf is a WideChar string.int nlen = ::WideCharToMultiByte(CP_ACP, 0, wcsBuf, -1, NULL, 0, NULL, NULL);  
    if (nlen == 0) 
        return "";  
     
    BYTE[] bytes = new BYTE[nlen+1]; 
    memset(byte,0, nlen+1); 
    ::WideCharToMultiByte(CP_ACP, 0, wcsBuf, -1, bytes, nlen , NULL, NULL);LPSTR lpAnsiStr = (LPSTR)bytes;
      

  5.   

    把编码都转成一样的再对比,都转成ansi的,或者都转成unicode的
      

  6.   

    谢谢楼上各位,库文件确实是ascii的,我直接在vc设置里改回了ascii,这样汉字编码就一样了