英文可以!对文件时,读出的中文是乱码!不知道为什么?

解决方案 »

  1.   

    ansii ? or binary mode?
      

  2.   

    UNICODE,用的是CFile::typeText模式
    binary mode试过,也不行!
      

  3.   

    could u please give me a example?
    [email protected]
      

  4.   

    CStdioFile addFile;
    addFile.Open(m_filePath,CFile::modeRead|CFile::typeText,NULL);
    CString name=TEXT("");
    addFile.ReadString(name);
    MessageBox(name,NULL,MB_OK);
    得到的就是乱码,注意是UNICODE环境,非UNICODE环境一切正常!
    CStdioFile addFile;
    addFile.Open(m_filePath,CFile::modeWrite|CFile::typeText,NULL);
    CString name=TEXT("a中华人民共和国");
    addFile.WriteString(name);
    MessageBox(name,NULL,MB_OK);
    结果文件里只有一个a
      

  5.   

    1.no close method called.
    2. CStdioFile is a c style stream, support unicode ?
      

  6.   

    SORRY
    应该加上close();支持,英文行,中文不行
    我试验了,CFile也不能写unicode中文!
      

  7.   

    thank you!
    谢谢你的热心!
      

  8.   

    o m g,不结帖不能送啊!
      

  9.   

    是不行呀.调试的时候就没有看到中文,如果只有中文的话也没有问题的.用_tfopen的方式可以.用std::basic_fstream<TCHAR> 吧
      

  10.   

    这个问题其实是这样产生的,我们写进去的只是数据而没有去写UNICODE文本标志。
    UNICODE文本标志是(用UltraEdit的16进制打开)在文件的开头两个数据应该是 0xFF 0xFE
    因为我们没有写这两个值,所以看起来就是乱码。“语文"的ANSI文本是这样的:
    ED 8B 87 65
    "语文"的UNICODE文本是这样的:
    FF FE ED 8B 87 65
      

  11.   

    似乎有道理.不过那CString怎么说呢?
      

  12.   

    CString 本身是支持 ANSI和UNICODE的,在我看来问题出在 Microsoft在 文件的读写方面的
    nOpenFlags 没有一个指定是按 UNICODE还是按照 ANSI来进行的。就因为这样所以这些函数或者API就没有办法判断是否写 0xFF 0xFE标志位。
      

  13.   

    debug到这里时
    CString name=TEXT("a中华人民共和国");
    到下一行的时候.
    监视的name="a";
      

  14.   

    代码大致应该这样写:void CTest1Dlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    CFile myFile;
    myFile.Open(_T("ab.txt"),CFile::modeCreate | CFile::modeWrite);
    static const TCHAR sz[] = _T("语文数学abcde物fghjik理");
    #ifdef _UNICODE
    char szBOM[] = "\377\376"; //注意:为什么是这两个数字?我也搞不清楚啊!
    #define SIZEOFBOM 2
    myFile.Write(szBOM, SIZEOFBOM);
    #endif
    myFile.Write(sz, lstrlen(sz)*sizeof(TCHAR));
    myFile.Close();
    }
      

  15.   

    呵呵,我知道这样可以..
    用CString .
      

  16.   

    如果在前面加两个的话我看_tfopen还要方便一些
      

  17.   

    试试不用CString用TCHAR能不能输出UNICODE, 我怀疑是不是_UNICODE宏没有起作用.CStdioFile addFile;
    addFile.Open(m_filePath,CFile::modeWrite|CFile::typeText,NULL);
    TCHAR name[]=TEXT("a中华人民共和国");
    addFile.WriteString(name);
    MessageBox(name,NULL,MB_OK);
      

  18.   

    果然还是要用TCHAR
    我还想TCHAR在VC中能不能用呢!
      

  19.   

    或者试试这个,没有_UNICODE也应该输出UNICODE的汉字.wchar_t name[]=L"a中华人民共和国";
    addFile.WriteString(name);完了用UltraEdit(不要用NotPad)看看成功没有.
      

  20.   

    Hanzo(不肯冷却的芯) ,不用CString,用TCHAR也不行!
      

  21.   

    char szBOM[] = "\377\376"; 等于 char szBOM[] = "\x0FF\x0FE"; 
    用八进制的数表示字符.
      

  22.   

    同意 StdAfx(任杰):
     SFM checks the file to see if it is formatted in Unicode. Unicode files can be identified when opened with a hexadecimal editor by the first four nibbles, which are always FF FE (assuming UTF-8 encoding). SFM : Services For Macintosh
      

  23.   

    问题基本解决,只是不知道为什么CFile::typeText写不进汉字。
    用CFile::typeBinary是可以写入的!但写入的东西如果想用wordpad查看的话,
    需要写入oxff和oxfe以标记写入的是unicode读取的时候要把第一行的oxff和oxfe  delete掉。就可以得到正确的unicode码了!
    结帖,发分!
    继续讨论[email protected]
      

  24.   

    另外用unicode方式读文件,文件要确保保存成了unicode格式
    ttzzgg_80713(50),
    StdAfx(任杰)(50)