pla*_*irt 5 java arrays character-encoding java.util.scanner
我Java用来阅读文件列表。其中一些具有不同的编码,ANSI而不是UTF-8. java.util.Scanner无法读取这些文件并获得空输出字符串。我尝试了另一种方法:
FileInputStream fis = new FileInputStream(my_file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
InputStreamReader isr = new InputStreamReader(fis);
isr.getEncoding();
Run Code Online (Sandbox Code Playgroud)
我不确定如何更改字符编码以防万一ANSI。UTF-8 和 ANSI 文件混合在同一文件夹中。为此,我尝试使用 Apache Tika。获得文件编码后,我使用Scanner,但输出为空。
Scanner scanner = new Scanner(my_file, detector.getCharset().toString());
line = scanner.nextLine();
Run Code Online (Sandbox Code Playgroud)
小智 1
你的方法不会给你正确的编码。
FileInputStream fis = new FileInputStream(my_file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
InputStreamReader isr = new InputStreamReader(fis);
isr.getEncoding();
Run Code Online (Sandbox Code Playgroud)
这将返回此 InputStream 使用的编码(读取javadoc),而不是文件中写入的字符(在您的情况下为 my_file )。如果编码错误,扫描仪将无法正确读取文件。
事实上,如果我错了,请纠正我,没有办法以 100% 的准确率对特定文件使用编码。很少有项目在猜测编码方面有更好的成功率,但不是 100% 的准确率。另一方面,如果您知道所使用的编码,那么您可以使用以下方式读取文件:
Scanner scanner = new Scanner(my_file, "charset");
scanner.nextLine();
Run Code Online (Sandbox Code Playgroud)
另外,找出 java 中用于 ANSI 的正确字符集名称。它是 US-ASCII 或 Cp1251。
无论您走哪条路,都要留意任何可能为您指明正确方向的IOException 。