【发布时间】:2021-11-25 14:36:07
【问题描述】:
我正在尝试获取文件开头是否有 Unicode BOM。我更喜欢使用iostream 标准库。我尝试按如下方式解决此任务:
std::wifstream str(filename);
wchar_t bom;
str.get(bom);
我假设因为 wchar_t 字符有两个字节大小,这段代码应该从文件中读取前两个字节,但它只读取第一个 0xFF 字节。
我明白,这可以通过“普通”流解决,但我有学术兴趣:为什么给定的代码只返回一个字节?
【问题讨论】:
-
未知数太多。文件使用的操作系统、编译器、标准库和编码是什么?
-
@n.1.8e9-where's-my-sharem。我想,这不应该影响结果,这就是我选择标准库的原因......文件的编码可能是ANSI或Unicode,我需要检测实际的。
-
"Unicode" 不是编码。 “ANSI”不是编码。 “不应该”是一个白日梦。我假设您使用的是 Windows,这是正确的吗?
-
@n.1.8e9-where's-my-sharem。 ASCII 和 UTF-16。是的,Windows 和 MSVC。
-
ASCII 文件没有 BOM。
标签: c++ iostream c++-standard-library