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