CString buf; //读unicode格式文件
CStdioFile file("unicode.ini", CFile::modeRead |  CFile::typeText);
  file.ReadString(buf);
  file.Close();    
    CWnd *pWnd = &m_ret_ctrl; //显示到编辑框
    pWnd ->SetWindowText(buf);结果当然是显示乱码了,可是 WideCharToMultiByte()函数不会用.而且,关于字符方面的LPCSTR和LPCWSTR,BSTR等搞不明白是什么意思.
请问该怎么做才能正确显示中文?

解决方案 »

  1.   

    试试这个TCHAR szBuf[BUFSIZE];
    ZeroMemory(szBuf, BUFSIZE);WideCharToMultiByte(
        CP_UTF8,
        WC_SEPCHARS,
        (LPCWSTR)(LPCTSTR)buf,
        buf.GetLength(),
        NULL,
        NULL);
      

  2.   

    如果工程不是UNICODE的,而又要读UNICODE的话不能用CString, 用WCHAR[]来装UNICODE
      

  3.   

    还是换一种办法
    每次读取一个WCHAR,这样不用再作转换
    当然换行的地方需要自己检测
      

  4.   

    非常感谢各位,我已经看到曙光了!以下是我的代码:
    CString buf; //读unicode格式文件
    CStdioFile file("unicode.ini", CFile::modeRead |  CFile::typeText);
      file.ReadString(buf);
      file.Close();   
     
    TCHAR szBuf[1000]; // snlux(snlux) 提示的做转换
    ZeroMemory(szBuf, 1000);
    WideCharToMultiByte(CP_ACP,
        0,(LPCWSTR)(LPCTSTR)buf,-1,szBuf,buf.GetLength(),NULL,NULL);CWnd *pWnd = &m_ret_ctrl; //显示到编辑框
    pWnd ->SetWindowText(szBuf);
    我得到的结果如下:
    文件中存的是"中华人民共和国",转换后显示的是"?中华人民共和国?"
    我非常高兴能看到这一结果,虽然不是很正确,希望各位能继续给点提示.多谢!
      

  5.   

    unicode文件是以0xff0xfe或0xfe0xff作为文件开头的标记的
    注意加以处理!
    我个人觉得先用stdiofile再用widechartomultibyte有点
    麻烦,在vc里处理unicode文本我认为自己处理文件读写比较好
    我以前做的一个文本编辑器(没做完),就是用file mapping把
    文件一股脑的读进来(当然这种方法可能并不是很好,不过速度
    还是很快的),然后分析字节缓冲区,对unicode文件以WCHAR
    为单位读入,对ansi文本以char读入...到了.net里就简单了,太简单了...