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();如何才能解决这个乱码问题呢??
字符(有中文)写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();如何才能解决这个乱码问题呢??
WriteFile(hFile,&wByteOrderMark,2,&dwBytesWritten,NULL) ;
在文本文件开头加上Unicode标记
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();
}
效果还是一样的,
改成这样: f.Write(szGBK, len)如果不想转换的话,就按照上面的帖子加文件头吧
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,就可以了