UNICODE 工程,
字符(有中文)写txt文本,结果是乱码:
size_t test = _tcsclen(Temp);
f.SeekToEnd();
f.Write(buf,test);
f.Close();
将Temp转换也是乱码:
int len = WideCharToMultiByte(CP_ACP, 0, Temp, -1, NULL, 0, NULL, NULL); 
char *szGBK=new char[len + 1]; 
memset(szGBK, 0, len + 1); 
WideCharToMultiByte (CP_ACP, 0, Temp, -1, szGBK, len, NULL,NULL);
size_t test = strlen(szGBK);
f.SeekToEnd();
f.Write(buf,test);
f.Close();如何才能解决这个乱码问题呢??

解决方案 »

  1.   

    需要在文件的开头写两个字节(FF FE 还是 FE FF 记不清了)
      

  2.   

    楼上说的对,试试FF FE。 
      

  3.   

    WORD wByteOrderMark = 0xFEFF   ;  
    WriteFile(hFile,&wByteOrderMark,2,&dwBytesWritten,NULL)   ;
    在文本文件开头加上Unicode标记
      

  4.   

    开头这样处理了:
    CFile f;
    CFileException e;
    TCHAR* pFileName = _T("test.txt");
    if(!f.Open(pFileName, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite , &e))
    {
    MessageBox(_T("qqqqq"));
    }
    else
    {
    unsigned short int feff=0xfeff;   
    f.SeekToBegin();
    f.Write(&feff,sizeof(short int));
    f.Close();
    }
    效果还是一样的,
      

  5.   

    http://topic.csdn.net/u/20091207/12/2379a9e4-2f92-4f3e-9db5-59e5f656f78f.html
      

  6.   

    怎么写入的还是buf呢,应该是szGBK才对,这样就不会乱码了
    改成这样: f.Write(szGBK, len)如果不想转换的话,就按照上面的帖子加文件头吧
      

  7.   

    http://topic.csdn.net/u/20091207/12/2379a9e4-2f92-4f3e-9db5-59e5f656f78f_2.html的#121楼楼主要善用搜索啊
      

  8.   

    搞错了,原来这样是可以的
    CFile f;
    CFileException e;
    TCHAR* pFileName = _T("test.txt");
    if(!f.Open(pFileName, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite | CFile::typeBinary, &e))
    {
    MessageBox(_T("错误"));
    }
    else
    {
           unsigned short int feff=0xfeff;   
           f.SeekToBegin();
           f.Write(&feff,sizeof(short int));//2
           f.Close();
    }也就是说只要在txt 的开头写进值:0xfeff,就可以了