C ++文件读取库 - ANSI和Unicode

时间:2009-06-18 12:13:29

标签: c++ unicode file-io

我在这里阅读了一些关于读取Unicode文件等的答案,大多数人都指向UTF8-CPP或iconv。

我找到的所有库都不适用于ANSI和Unicode文件,理想情况下我想要一个我传递文件名的函数,它将返回该文件的内容,编码是什么并不重要,或者这是不可能的吗?

如果有任何建议我会怎么做呢?

3 个答案:

答案 0 :(得分:2)

好吧,那是二进制读取不是吗?所有其他形式都是解释问题,然后确切的编码等变得重要。

虽然由于BOM,unicode在某些情况下可以自动检测,但并不总是存在,并且失败的检测机制则等于破坏的程序。我认为这就是为什么大多数人都不会这样做的原因。

答案 1 :(得分:0)

UTF8-CPP可以检测UTF8(utf8 :: is_valid和utf8 :: find_invalid)并在使用宽字符串时进行转换(utf8 :: utf16to8)。它的效果很好,有什么问题?

答案 2 :(得分:0)

您可以使用多种技术:

通常,大多数Unicode文件都以BOM开头。这意味着如果文件以0xfffe0xfeff开头,则可能认为它是Unicode。没有多少人使用UTF-32 AFAIK,但您仍然可以使用BOM方法进行猜测(参考Wiki页面)。

如果是UTF-8文件,您可以使用UTF8-CPP将其转换为UTF-16(wstring)。如果是UTF-16文件,则使用标准库很难读取。对于tah,您可以参考我的博客文章:

http://cfc.kizzx2.com/index.php/reading-a-unicode-utf16-file-in-windows-c/

对于UTF-32 - 我不知道是否有人使用它,所以我没有经验:P