在VS2005中:
CStdioFile f;
if(!f.Open(_T("test.txt", CFile::typeText|CFile::modeRead))return;
CString s;
f.ReadString(s);
AfxMessageBox(s);为何英文能正确显示,而中文显示的是乱码?我用的是VS2005,好像VS2005中的CString和以前版本有些不同?用记事本打开test.txt的话是正确显示的.

解决方案 »

  1.   

    读出来后,用MultiByteToWideChar把字符串转换成unicode的,
    存入文件时,再调用WideCharToMultiByte
      

  2.   

    好像是CStdioFile的bug,把工程的字符集属性改成使用多字节字符集试试
      

  3.   

    我试了下把test.txt保存成unicode格式的,结果更糟,读出的全是乱码~~~
    这是怎么加事呀,真要命...
    除了CStdioFile外有没其它的类可以从文件读取一行字符串的.
      

  4.   


    首先明确两件事情:1、你的工程是不是 Unicode ?2、你的文件是不是 Unicode ?
    如果对 Unicode 没有概念,请看《Windows程序设计》第二章“Unicode简介”下载地址:http://blog.csdn.net/zaodt/archive/2007/11/25/1901332.aspx
      

  5.   

    工程是Unicode的,要如何读取文本才是正确的?
    文件是ansi格式的.
      

  6.   

    问题找到了,就好解决了。1、先读入 ANSI 格式的字符串;2、调用 API 函数 MultiByteToWideChar 把它转换成 Unicode;
      

  7.   


    MultiByteToWideChar 函数大概的使用方法:1、第一遍调用计算转换后需要的字符数;2、动态申请内存,就是建立一个数组;3、第二遍调用进行转换;
      

  8.   

    问题是解决了,还想问下zaodt兄,我用记事本的另存为选项把ansi格式以unicode格式存放后,为何读取的全是乱码,连英文也是错的.