繁体   English   中英

消耗UTF-8 BOM

[英]Consuming UTF-8 BOM

给出以下代码:

typedef std::codecvt_utf8_utf16<wchar_t, 0x10ffff, std::codecvt_mode::consume_header> MyCodeCvt;
std::wifstream myStream("Test.txt");
std::locale myLocale(myStream.getloc(), new MyCodeCvt());
myStream.imbue(myLocale);
wstring str;
myStream >> str;
myStream.close();

这会正确消耗“ Test.txt”的前3个字节中的UTF-8 BOM(EF,BB,BF),并且“ str”已正确设置为其后的数据,但是任何人都可以解释原因,如果我现在在typedef 中将std :: codecvt_mode :: consume_header更改(std :: codecvt_mode)0 ,它仍然会消耗BOM? 现在应该不应该在“ str”中显示这3个BOM表字符,否则我是否丢失了某些内容。 请注意,我正在使用Visual Studio2013。谢谢。

感谢大家的帮助。 事实证明这是一个环境问题。 我在另一台计算机上安装了VS2013,该问题不再发生。 对此感到惊讶,我在有问题的计算机上卸载并重新安装了该计算机,该计算机也不再在那里出现。 毫无疑问,只是您典型的程序员的SNAFU(希望我每个人都有一个镍)。 再次感谢。

如果在读取以字节顺序标记开头的文件时未选择std :: consume_header,则Unicode字符U + FEFF(零宽度不间断空格)将被读取为字符串内容的第一个字符。

http://en.cppreference.com/w/cpp/locale/codecvt_mode

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM