请教为什么读取的文本文件都跟着乱码
我使用的是VC2005,项目属性页里,字符集:使用 Unicode 字符集原来为多字符集时,一切正常,改成Unicode 字符集后就这样了,我怎么改也不行了
请高手帮忙...
//读取文本文件
CString CHtmlCodeFactory::ReadTextFile(CString fileName)
{
    CFile m_File( fileName, CFile::modeNoTruncate | CFile::modeReadWrite);
    TCHAR *fileContent=new TCHAR[m_File.GetLength()];
    m_File.Read(fileContent, m_File.GetLength());
    fileContent[m_File.GetLength()] = '\0';
    return fileContent;
}
结尾乱码为:文字췍췍췍췍췍췍췍췍
经过下面这样修改,还是一样,只是乱码的样子不一样了!!!
结尾乱码为:文字??????????
CString CHtmlCodeFactory::ReadTextFile(CString fileName)
{
    CFile m_File( fileName, CFile::modeNoTruncate | CFile::modeReadWrite);
    int iLength = m_File.GetLength();
    TCHAR *fileContent=new TCHAR[iLength];
    m_File.Read(fileContent, m_File.GetLength());
    char * p = new char[iLength+1];
    WideCharToMultiByte( CP_ACP, 0, fileContent, -1, p, iLength, NULL, NULL );
    p[iLength+1] = '\0';    return CString(p);
}

解决方案 »

  1.   


    CString   CHtmlCodeFactory::ReadTextFile(CString   fileName)
    {
    CFile m_File(fileName, CFile::modeNoTruncate|CFile::modeReadWrite);
    char *fileContent=new   char[m_File.GetLength()+0];
    m_File.Read(fileContent,   m_File.GetLength());
    fileContent[m_File.GetLength()]   =   '\0'; 
    //将fileContent由ascii转unicode编码 return unicode_fileContent;

      

  2.   

    我知道你的意思,使用这个就可以MultiByteToWideChar(CP_ACP, 0, fileContent, -1, sgxing.GetBuffer(), m_File.GetLength());可我现在是要把unicode转成ascii我的数据本来就已经是unicode的了,不需要再转
      

  3.   

    读取得时候要按照字节,然后强制转换为LPCTSTR指针就可以了。
      

  4.   

    CString   CHtmlCodeFactory::ReadTextFile(CString   fileName) 

            CFile   m_File(   fileName,   CFile::modeNoTruncate   ¦   CFile::modeReadWrite); 
            int   iLength   =   m_File.GetLength(); 
            TCHAR   *fileContent=new   TCHAR[iLength]; 
            m_File.Read(fileContent,   m_File.GetLength()); 
            fileContent[iLength/2] = '\0';//修改这句后,正常
            return   CString(p); 
    }
    总结一下,具体我还是不明白,是不是从文件中读取完,已经不是宽字符了
      

  5.   

    CString       CHtmlCodeFactory::ReadTextFile(CString       fileName)   
    {   
                    CFile       m_File(       fileName,       CFile::modeNoTruncate       ¦       CFile::modeReadWrite);   
                    int       iLength       =       m_File.GetLength();   
                    TCHAR       *fileContent=new       TCHAR[iLength];   
                    m_File.Read(fileContent,       m_File.GetLength());   
                    fileContent[iLength/2]   =   '\0';//修改这句后,正常 
                    return       CString(p);   
    } --给分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!