我应该使用什么来阅读我不知道其编码(ASCII或Unicode)的文本文件?
是否有某些类会自动检测编码?
答案 0 :(得分:6)
我只能在这里给出否定答案:没有通用的正确方法来确定文件的编码。 ASCII文件可以作为ISO-8859-15编码读取,因为ASCII是一个子集。更糟糕的是,其他文件可能在两种具有不同含义的不同编码中有效。所以你需要通过其他方式获取这些信息。在许多情况下,假设一切都是UTF8是一个很好的方法。如果您正在使用* NIX环境,则LC_CTYPE变量可能会有所帮助。如果您不关心编码(例如,您不更改或处理内容),则可以将文件打开为二进制文件。
答案 1 :(得分:1)
在一般情况下这是不可能的。如果文件包含确切的 我在这里输入的字节,它同样有效,如ASCII,UTF-8或任何 ISO 8859变种。可以使用几种启发式方法作为猜测, 但是:读取第一个“页面”(512字节左右),然后,在下面 订单:
'\0', other, '\0', other
utf16be应按
other, '\0', other, '\0'
utf16le应按
'\0', '\0', '\0', other
UTF32BE
other, '\0', '\0', '\0'
UTF32RLE
但正如我所说,这不是100%肯定。
(PS。如何在此处格式化表格。第2点中的文字声明为 一个HTML表,但它似乎没有显示为一个。
答案 2 :(得分:0)
其中一种做法(蛮力)可以是
参考:http://www.codeproject.com/KB/recipes/DetectEncoding.aspx
如果您确定传入的编码是ANSI或Unicode,那么您也可以检查byte order mark。但是,让我告诉你,这不是完全证明。