c++ - 无论编码如何,从 wifstream 中提取正确的文本

标签 c++ boost encoding utf-8 locale

这是程序:http://codepad.org/eyxunHot
文件编码为UTF-8。

我有一个名为“config.ini”的文本文件,其中包含以下单词: ➑球

如果我用记事本将文件保存为“UTF-8”编码,然后运行程序,根据调试器,eight_ball 的值为: âball

如果我用记事本以“Unicode”编码保存文件,然后运行程序,根据调试器,eight_ball 的值为: ÿþ'b

如果我用记事本以“Unicode big endian”编码保存文件,然后运行程序,根据调试器,eight_ball 的值为: þÿ'

在所有这些情况下,结果都是不正确的。 ANSI 编码也不支持 ➑ 符号。当我转到 config_file >> eight_ball 时,如何确保单词 ➑ball 将从文件中提取出来,而不考虑编码?无论 config.ini 的编码如何,我都希望这个程序的输出是“程序是正确的”。

最佳答案

如果您在 Windows 下并且想要使用 INI 文件,请记住 INI API 毫无问题地支持 Unicode(UTF-16 小端)INI 文件,您只需提供带有 BOM 的空文件开始。

顺便说一句,如果您想使用 C++ 流和 Unicode,您可能需要查看 this article .除了 UTF8 之外,您还将了解字符转换在 C++ 流中的工作原理。

关于c++ - 无论编码如何,从 wifstream 中提取正确的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2260441/

相关文章:

c++ - 在单头文件、静态库和共享库之间链接 boost 库的哪种用法变体更好?

c++ - 我如何继承 mpl::vector 中的所有类型?

c++ - Boost upgrade_to_unique_lock 编译错误

c++ - boost::archive::binary_oarchive 如何处理枚举?

python - Unicode编码错误: 'ascii' codec can't encode character u'\xea' in position 39: ordinal not in range(128)

linux - Linux和Windows之间的文本编码

encoding - ASP/VBScript ServerXmlHttp 编码

c++ - 类类型和数据成员的 sizeof 引用不同

c++ - 对重载new和delete施加限制

c++ - PIMPL 问题 : How to have multiple interfaces to the impl w/o code duplication