一尘不染

Java:如何确定流的正确字符集编码

java

以编程方式确定输入流/文件的正确字符集编码的最佳方法是什么?

我尝试使用以下方法:

File in =  new File(args[0]);
InputStreamReader r = new InputStreamReader(new FileInputStream(in));
System.out.println(r.getEncoding());

但是在我知道要用ISO8859_1编码的文件上,上面的代码会产生ASCII,这是不正确的,并且不允许我将文件的内容正确地呈现回控制台。


阅读 343

收藏
2020-02-27

共1个答案

一尘不染

无法确定任意字节流的编码。这就是编码的本质。编码是指字节值与其表示形式之间的映射。因此,每种编码“都可以”是正确的。

的getEncoding()方法将返回其设置(读取的编码的JavaDoc),用于该流。它不会为你猜测编码。

一些流告诉你使用哪种编码来创建它们:XML,HTML。但不是任意字节流。

无论如何,如果需要,你可以尝试自己猜测一个编码。每种语言的每个字符都有相同的频率。在英语中,字符经常出现,但是ê很少出现。在ISO-8859-1流中,通常没有0x00字符。但是UTF-16流有很多。

或者:你可以询问用户。我已经看到过一些应用程序,这些应用程序以不同的编码形式为你提供该文件的摘要,并要求你选择“正确的”文件。

2020-02-27