【发布时间】:2012-04-14 08:33:14
【问题描述】:
我有一些使用 UTF-8 编码的文本文件。有没有办法使用 c++ 流类(例如 wifstream)来读取它们?
我见过一些外部参考,比如 boost 和一些 codeproject 代码 sn-ps。但是,我不想仅仅为了这个目的而使用它。
在 linux 上,它通过调用 imbue(std::locale("en_US")) 以某种方式工作,但在 Windows 上却不行。我认为问题在于窗口假定 wifstream 是 UTF-16 编码流。我不能以某种方式使用 wifstream 类指定 unicode 编码,以便它使用 UTF-8 而不是 UTF-16?
【问题讨论】:
-
你用它们做什么?如果您随后将生成的缓冲区视为 UTF-8,则始终可以使用
ifstream读取 UTF-8 文件。由于wchar_t在 Windows 和 Linux 中的大小不同,“宽”流往往更不便携。 -
我不会把它作为一个完整的缓冲区来阅读。假设我使用提取运算符并逐字符读取流,会发生什么?它会正确读取字符吗?我猜不是。