在读取文件之前,如何确定文件使用的编码?
我正面临着一个问题。
文件可以用某种编码编写,如UTF-8
, UTF-16
, UTF-32
等。
当我读取UTF-16
文件时,我使用下面的代码:
BufferedReader in = new BufferedReader( new InputStreamReader( new FileInputStream(file), "UTF16"));
在读取文件之前,如何确定文件所在的编码?
当我使用UTF-16
读取UTF-8
编码文件时,我无法正确读取字符。
没有好办法做到这一点。 你问的问题就像通过观察它来确定一个数字的基数。 例如, 101
的基数是多少?
最好的解决方案是将数据读入字节数组。 然后你可以使用String(byte []字节,Charset charset)来测试多个编码,最不可能。
你不能。 应用哪种转换格式通常由文件的前四个字节确定(假设BOM)。 你不能只从外面看到那些。
您可以读取前几个字节并尝试猜测编码。
如果所有其他方法都失败了,请尝试使用不同的编码进行读取,直到其中一个有效(解码时没有例外,它看起来’OK’)。