在读取文件之前,如何确定文件使用的编码?

我正面临着一个问题。

文件可以用某种编码编写,如UTF-8UTF-16UTF-32等。

当我读取UTF-16文件时,我使用下面的代码:

  BufferedReader in = new BufferedReader( new InputStreamReader( new FileInputStream(file), "UTF16")); 

在读取文件之前,如何确定文件所在的编码?

当我使用UTF-16读取UTF-8编码文件时,我无法正确读取字符。

没有好办法做到这一点。 你问的问题就像通过观察它来确定一个数字的基数。 例如, 101的基数是多少?

最好的解决方案是将数据读入字节数组。 然后你可以使用String(byte []字节,Charset charset)来测试多个编码,最不可能。

你不能。 应用哪种转换格式通常由文件的前四个字节确定(假设BOM)。 你不能只从外面看到那些。

您可以读取前几个字节并尝试猜测编码。

如果所有其他方法都失败了,请尝试使用不同的编码进行读取,直到其中一个有效(解码时没有例外,它看起来’OK’)。