我想读取从windows注册表导出的.reg文件。我发现.reg文件被编码为Windows UNICODE文件(我认为它是UCS2-LE编码的,因为前两个字节是:FFFE )。
所以我这样读文件:
fp = _wfopen(lpszRegFilePath, _T("r, ccs=UNICODE"));
if ( NULL == fp)
{
dwErr = ERROR_NOT_FOUND;
break;
}
szData = new WCHAR[8192];
ZeroMemory(szData, 8192);
fgetws(szData, 8192, fp);
//........下面是szData的结果:

_wfopen能否识别物料清单?如果是这样,为什么它只是忽略FFFE的物料清单呢?
发布于 2012-12-01 11:36:12
"css"参数允许_wfopen()检测FILE*并标记相应的"css",以便正确解码文件的其余部分(如果存在BOM,它将覆盖BOM值),但不会丢弃该BOM,并且documentation中没有说明它会这样做。因此,您只需检查从文件中读取的前2个WCHAR,看看它们是否是UTF-16LE BOM ( UTF-8 BOM将被解码为UTF-16LE BOM),并在需要时忽略它们。
更新:我刚刚想到了一些事情。fgetws()将返回BOM的单个字节作为缓冲区中的单个WCHAR值。如果它遵守BOM,那么它就不应该这样做,这意味着它将文件解析为Ansi/MBCS而不是UTF-16LE。你使用的是可视化C++吗?"css"参数是特定于VC++的_wfopen()扩展。非Microsoft编译器供应商不支持它。
https://stackoverflow.com/questions/13617786
复制相似问题