我在 java 中遇到了 UTF-8 编码的问题。我有一个 UTF-8 编码的 .txt 文件。我在记事本++中检查了该文件实际上是 UTF-8 编码的。我尝试读取文件,但特殊字母未正确显示。
我使用以下代码和平:
try {
Scanner sc = new Scanner(new FileInputStream("file.txt"), "UTF-8");
String str;
while(sc.hasNextLine()) {
str = sc.nextLine();
roadNames.add(str);
System.out.println(str);
}
sc.close();
} catch(IOException e1) {
System.out.println("The file was not found....");
}
它在 Eclipse 中正确显示特殊字母,我将默认编码定义为 UTF-8,但在我生成的 jar 文件中没有。
唯一对我有用的是使用以下参数“java -Dfile.encoding=utf-8 -jar executable.jar”制作一个 .bat 文件,但我认为这不是一个好的解决方案。
此外,这也有效:
PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.println(str);
更新
当我说
特殊字母未正确显示
我的意思是 System.out.println 打印一个字符串,其中特殊字母被替换为 ├à 而不是 å 例如。
事实证明
PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.println(str);
毕竟不起作用 - 对此感到抱歉。
真正的问题不是我希望控制台打印出文本文档中的内容,而是文本文档中的每一行都包含一个名称,并且这个名称被添加到一个 ArrayList 中。然后我有一个 JTextField,当我开始在其中输入时,它会尝试通过在 ArrayList 中搜索最佳匹配名称来自动完成我输入的内容。如果不是因为编码问题,这非常有效,因为 JTextField 中的特殊字母没有正确显示。仅当我使用 Dfile.encoding=utf-8 参数时才正确显示