以编程方式确定输入流/文件的正确字符集编码的最佳方法是什么?
我尝试使用以下方法:
File in = new File(args[0]); InputStreamReader r = new InputStreamReader(new FileInputStream(in)); System.out.println(r.getEncoding());
但是在我知道要用ISO8859_1编码的文件上,上面的代码会产生ASCII,这是不正确的,并且不允许我将文件的内容正确地呈现回控制台。
无法确定任意字节流的编码。这就是编码的本质。编码是指字节值与其表示形式之间的映射。因此,每种编码“都可以”是正确的。
的getEncoding()方法将返回其设置(读取的编码的JavaDoc),用于该流。它不会为你猜测编码。
一些流告诉你使用哪种编码来创建它们:XML,HTML。但不是任意字节流。
无论如何,如果需要,你可以尝试自己猜测一个编码。每种语言的每个字符都有相同的频率。在英语中,字符经常出现,但是ê很少出现。在ISO-8859-1流中,通常没有0x00字符。但是UTF-16流有很多。
或者:你可以询问用户。我已经看到过一些应用程序,这些应用程序以不同的编码形式为你提供该文件的摘要,并要求你选择“正确的”文件。