首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >_wfopen能否将UCS2-LE编码文件读入宽字符字符串缓冲区?

_wfopen能否将UCS2-LE编码文件读入宽字符字符串缓冲区?
EN

Stack Overflow用户
提问于 2012-11-29 10:15:51
回答 1查看 655关注 0票数 1

我想读取从windows注册表导出的.reg文件。我发现.reg文件被编码为Windows UNICODE文件(我认为它是UCS2-LE编码的,因为前两个字节是:FFFE )。

所以我这样读文件:

代码语言:javascript
复制
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的物料清单呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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编译器供应商不支持它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13617786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档