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

时间:2012-05-19 19:09:31

标签: java character-encoding

我遇到了问题。

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

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

最佳解决方案是将数据读入字节数组。然后,您可以使用String(byte[] bytes, Charset charset)使用多种编码对其进行测试,最有可能是最不可能的。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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