文件编码是utf8但在Windows-1256中是可读的

时间:2015-06-12 16:01:56

标签: encoding utf-8

我正在处理具有未知编码的文件,但我在JAVA中使用这些行进行编码:

#pdf_file_name#

我们在输出中得到UTF8。 但问题是,当我尝试使用浏览器或文本编辑器(如Notpad ++)查看文件内容时,我无法正确查看字符。相反,当我将编码更改为Windows-1256时,所有字符都是正确且可读的。 我有什么不对吗?

2 个答案:

答案 0 :(得分:0)

Java不会尝试检测文件的编码。 getEncoding返回InputStreamReader构造函数中选择的编码。如果您没有使用其中一个带有字符集参数的构造函数,那么根据Oracle的文档,您将获得'平台默认字符集。

This question讨论平台默认字符集是什么,以及如何更改它。

如果您事先知道此文件是Windows-1256,则可以使用:

InputStreamReader inputStreamReader = new InputStreamReader(in, "Windows-1256");

尝试检测文件的编码通常会失败 - 请参阅Windows记事本中的Bush hid the facts问题。

答案 1 :(得分:0)

不幸的是,没有100%可靠的方法来检测文件的编码,而另一个答案指出Java默认不会尝试。它只是假设平台的默认编码。

如果您知道这些文件都是单一编码,那么很好,您可以指定编码和生活是好的。

如果您知道某些文件是UTF-8,而某些文件是单个传统编码,那么您通常可以先尝试严格的* UTF-8解码。如果严格的UTF-8解码错误,那么您将继续使用旧版编码。

如果你有更广泛的编码组合,事情会变得非常困难,你可能不得不求助于一些相当复杂的语言处理来解决它们。

*我相信在Java中需要首先获得“Charset”的严格解码,然后获得“CharsetDecoder”然后使用“onMalformedInput”方法将其设置为严格模式。