CFile temp1;
CFile temp2;
temp1.Open(_T("set1.dat"),CFile::modeCreate|CFile::modeReadWrite);
temp2.Open(_T("set2.dat"),CFile::modeCreate|CFile::modeReadWrite);
wchar_t aa[20];
wchar_t bb[20];
temp1.SeekToBegin();
temp2.SeekToBegin();
temp1.Read(aa,temp1.GetLength());
temp2.Read(bb,temp2.GetLength());
AfxMessageBox(aa);aa再次输出乱码,又是unicode的事,从dat文件读出来的字符串存为什么编码?
要怎么处理成unicode.

解决方案 »

  1.   

    呵呵,读的时候看存的时候是什么编码啊。
    存的时候是Unicode,就按照unicode读取,是ANSI的,就按照ANSI读取unicode和ansi转换,就两个函数
    WideCharToMultiByte 和 MultiByteToWideChar
      

  2.   

    顶死楼上的,就是那样,另注意你程序的编译,到底是multibytes的还是unicode的。
      

  3.   

    dat文件一般是按照一定格式写的,不一定是字符型,所以有可能直接看是乱码,你需要知道它的格式,比如说:如果我存了一个double型的数值到dat文件中,你直接按照wchar_t的形式读出来肯定乱了,
    应该是doblue aa;
       tmp1.Read( &aa, sizeof(double));
      

  4.   

    楼主,你确认你读出数据了?你那个aa,bb没有初始化,当然是乱码,
    看看下面,不要用modeCreate打开已经有的文件。CFile::modeCreate
       Directs the constructor to create a new file. If the file exists already, it is truncated to 0 length.
      

  5.   

    如果你不用unicode读取,而用char来读去还是乱码吗?
      

  6.   

    或者,modeCreate 跟 modeNoTruncate 一起用。
      

  7.   

    能说说CFile中的Write和Read中用unicode编码怎么避免乱码吗?
      

  8.   

    Write和Read都是按照字节进行操作的,所以跟编码没关系。
    关键是你怎么组织写入/读取的数据内容格式。
      

  9.   

    比如,你写一个int, 那同样位置读出来就是int,
    你写一个wchar_t, 那同样位置读出来就是wchar_t,
      

  10.   

    1楼,怎么存成unicode?
    我自始至终都是用unicode编码进行编译的。
      

  11.   

    1楼主要是说读取的方式,楼主既然是unicode版本可以先不管其他。不过,wchar_t最好改成TCHAR
      

  12.   

    楼主,你的文件已经被覆盖了,需要重新write保存,再read读取试试。
      

  13.   

    写成这样,然后看看是否真的读取了数据。
    另,看看temp1.GetLength的值是多少。
    wchar_t aa[20] = {0}; 
    wchar_t bb[20] = {0}; 
      

  14.   

    存进去的是什么,读出来的就是什么!
    你应该先知道se1.dat是怎么存进去的
      

  15.   

    楼主程序用的是Unicode编程吧你用CFile读出数据后,先用MultiByteToWideChar函数将ANSI模式的转换成Unicode模式的,然后AfxMessageBox输出
    当你想把你程序中的某一CString 对象保存进文本文件时,先用WideCharToMultiByte将Unicode模式的转换成ANSI的,然后CFile.Write。
      

  16.   

    楼上,可不可以用unicode演示一下,如何用MultiByteToWideChar和WideCharToMultiByte配合CFile的Read或Write操作?