我在这里阅读了一些关于读取Unicode文件等的答案,大多数人都指向UTF8-CPP或iconv。
我找到的所有库都不适用于ANSI和Unicode文件,理想情况下我想要一个我传递文件名的函数,它将返回该文件的内容,编码是什么并不重要,或者这是不可能的吗?
如果有任何建议我会怎么做呢?
答案 0 :(得分:2)
虽然由于BOM,unicode在某些情况下可以自动检测,但并不总是存在,并且失败的检测机制则等于破坏的程序。我认为这就是为什么大多数人都不会这样做的原因。
答案 1 :(得分:0)
UTF8-CPP可以检测UTF8(utf8 :: is_valid和utf8 :: find_invalid)并在使用宽字符串时进行转换(utf8 :: utf16to8)。它的效果很好,有什么问题?
答案 2 :(得分:0)
您可以使用多种技术:
通常,大多数Unicode文件都以BOM开头。这意味着如果文件以0xfffe
或0xfeff
开头,则可能认为它是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