在MFC中序列化为Unicode文本文件-文件头错误

Serializing to Unicode text file in MFC - wrong file header

本文关键字:文件 错误 文本 Unicode MFC 序列化      更新时间:2023-10-16

我正在尝试序列化对象列表。对象本身仅包含CString成员。序列化是对文本文件进行的,以便创建人类可读的日志文件。问题是,为了编写Unicode字符串,文件需要具有Unicode编码的BOM(字节顺序标记)。

FILE *fStream = NULL;
VERIFY( _tfopen_s( &fStream, _T( "D:\Test.txt" ), _T( "wt,ccs=UNICODE" ) ) == 0 );
CStdioFile theFile;
theFile.m_pStream = fStream;
CArchive archive( &theFile, CArchive::store );
ListContainingObject.Serialize( archive );

Serialize()中,我试图写入元素的数量,因此用列表的大小调用CArchive::WriteCount()。这会打乱BOM,例如,如果在记事本中打开文件,-符号显示在文件的开头。

在HEX查看器中,文件头如下所示:ff fe 06 00。我知道06是我写的清单的容量。我也知道-可能具有ff fe 06 00的ASCII值。问题是:

有没有什么方法可以把一个整数写到文件的开头,而不让它与字节顺序标记混淆,这样文本编辑器中就不会显示符号了?

哦,一切都会一团糟。如果序列化CString对象,它们也将按照列表的方式写入长度计数。

如果您只有一个字符串列表,那么请使用w wsprintf()或CString::Format()将计数转换为字符串。。。将计数写为字符串,并以换行符("\n")结束。将所有剩余的字符串写成以换行符结尾的字符串。如果你的字符串中有换行符,那么,你将不得不以某种方式逃离它。您可以将数据放在某种XML格式中。你有很多选择。