当前位置:C++技术网 > 资讯 > CFile类write读取文件乱码的解决方法

CFile类write读取文件乱码的解决方法

更新时间:2015-12-13 20:29:09浏览次数:1+次

网上流行的答案显然没有命中问题的要害!其实,unicode字符已经被Cfile忠实地输入了文件当中!遗憾的是字处理软件(如:记事本)不知道其中是unicode字符,将他们统统当做了单字节字符处理。
要想让字处理软件识别unicode必须在文件头上加入unicode编码的前导字符:0xff, 0xfe。
于是,可以用下面的代码实现汉字的输出且用字处理软件打开不会乱码
CFile DPDA;
 CString FileName;
 CString strLine;
 FileName=_T("C:\\DPDA.txt");
 DPDA.Open(FileName,CFile::modeCreate|CFile::modeWrite);
 strLine="张三、李四";
 DPDA.Write(strLine,wcslen(strLine)*sizeof(wchar_t));  //这句重要
 CString strEnter;
 strEnter="\r\n";
 DPDA.Write(strEnter,4);
 DPDA.Write(strLine,wcslen(strLine)*sizeof(wchar_t));
 DPDA.Close();

代码实现:

修改代码:

void C文件信息View::OnCoderead()
{
	// TODO: 在此添加命令处理程序代码
	CFile DPDA;
	CString FileName;
	CString strLine;
	FileName=_T("C:\\DPDA.txt");
	DPDA.Open(FileName,CFile::modeCreate|CFile::modeWrite);
	strLine="张三、李四";
	WORD unicode = 0xFEFF;  //这句重要
	DPDA.Write(&unicode,2);  //这句重要
	DPDA.Write(strLine,wcslen(strLine)*sizeof(wchar_t));  //这句重要
	CString strEnter;
	strEnter="\r\n";
	DPDA.Write(strEnter,4);
	DPDA.Write(strLine,wcslen(strLine)*sizeof(wchar_t));
	DPDA.Close();
}


在《图形文件的编码与解密1》中,如果注释掉某两句代码,也会乱码读不出来。你试试,猜猜是哪俩句?