【发布时间】:2016-10-17 01:37:01
【问题描述】:
我有一个读取文本文件的 C++ 程序。目前我正在使用 C 的 fopen() 读取,然后使用 fgetc() 读取下一个字符。
我typedef'd 了一个“文件字符”,它实际上是一个int(我可以毫无问题地将其更改为long)。
现在程序可以读取 UTF-7 和 UTF-8 文本文件,但如果我使用 UTF-16 或 UTF-32 文本文件呢?有没有办法推断文件编码然后正确读取文件?
即使传递给 C++ 的 istream 也不是问题。
【问题讨论】:
-
祈祷文件有一个Byte Order Mark 你可以阅读然后相应地设置流的语言环境。如果没有,请开始猜测。
-
正如这个类似问题的答案中所述,以二进制模式读取文件将绕过因与 ASCII 不兼容而造成的任何限制。