100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 使用Unicode字符集时用CFile把中文写入txt文件再用记事本打开出现乱码的问题

使用Unicode字符集时用CFile把中文写入txt文件再用记事本打开出现乱码的问题

时间:2024-06-20 20:15:57

相关推荐

使用Unicode字符集时用CFile把中文写入txt文件再用记事本打开出现乱码的问题

使用Unicode字符集时用CFile把中文写入txt文件再用记事本打开出现乱码的问题

新建一个记事本,写入“中”,另存为ANSI.txt,编码选ANSI;再次另存为Unicode.txt,编码选Unicode。把这两个文件用UltraEdit的十六进制功能打开(编辑 -> 十六进制功能 -> 十六进制编辑),如下图所示:

打开VS(我用的是VS),设定字符集为Unicode(右键项目名,属性 -> 配置属性 -> 常规 -> 字符集 -> 使用 Unicode 字符集),然后使用下面这段代码生成一个文件

CString strPath = _T("C:\\Documents and Settings\\Administrator\\桌面\\test.txt");

CFile file;

if (file.Open(strPath, CFile::modeCreate | CFile::modeWrite))

{

//file.Write("\xff\xfe", 2); // 设置Unicode编码文件头

CString strText = _T("中");

file.Write(strText, sizeof(TCHAR) * strText.GetLength());

}

把生成的文件用记事本打开,出现乱码,同样用十六进制功能打开,结果如下图所示:

对比图2发现最后两个字节都一样,但是图2前面多了两个字节:FF FE

一阵google之后发现图2中最开头的这两个字节是用于说明文件的编码方式,本例中我们把Unicode字符写入文件,却没有设置这个文件头。于是用记事本打开时,系统就会认为这是一个ANSI编码的文件(见图1,ANSI编码的文件没有文件头,没找到文件头就认为是ANSI编码),当然就出现乱码了。

解决办法:思路当然就是要想办法写入文件开头的那两个字节,这样系统才会认定这是一个Unicode编码的文件。具体方法就是把上面那段代码中的注释去掉,重新生成一下文件,用十六进制功能打开,发现和图2一样了,再用记事本打开,可以正常显示了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。