我有一个简单的文本文件,它只包含一个字符'≤'。 没别的了。 此文件采用UTF-8编码。 当我使用方法files.readAllLines()读取此文件时,字符显示为问号‘?’
try (FileWriter fw = new FileWriter(new File(file, "f.txt"));
PrintWriter writer = new PrintWriter(fw);) {
List<String> lines = Files.readAllLines(deProp.toPath());
for (String line : lines) {
System.out.println(line);
writer.write(line);
writer.println();
}
在我的示例中,我试图将该行打印到控制台和一个新文件中。 在这两种情况下,都会显示一个问号。
有什么解决的建议吗?
files.readalllines(路径)
已经使用UTF-8(请参阅链接的文档)。 如果您使用的是files.readalllines(path,charset)
变量,那么当然可以将UTF-8
作为字符集传递(例如使用StandardCharsets.utf_8)
。
假设您使用的是短版本或传递UTF-8,那么错误不在于Java,而在于您的设置。
要么文件不包含UTF-8中的≤,要么您用Java打印到一个不显示此类符号的地方(例如,因为您的字体没有它,而使用?作为“我的字体文件中没有这个符号”的占位符符号;它通常是一个方框符号),要么您将输出发送到一个错误地假定发送的不是UTF-8的地方。
文件类E.I.的静态方法
public static List<String> readAllLines(Path path) throws IOException
就是从文件中读取所有行。 文件中的字节使用UTF-8字符集解码为字符。 此方法调用等效于计算表达式:
Files.readAllLines(path, StandardCharsets.UTF_8)
该文件可能包含一些垃圾或不符合UTF-8字符集格式的东西。 手动检查文件中的文本一次:p