Files.readAllLines() 没有正确读取所有字符

Files.readAllLines() does not read all characters correctly

我有一个简单的文本文件,其中只有一个字符“≤”。没有其他的。此文件采用 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(path) 已经使用 UTF-8(请参阅链接文档)。如果您使用 Files.readAllLines(path, charset) 变体,当然,将 UTF-8 作为字符集传递(例如使用 StandardCharsets.UTF_8).

假设您使用的是短版本或传递 UTF-8,那么错误不在于 java,而在于您的设置。

文件不包含 UTF-8 中的 ≤,或者您在 java 中将其打印到不显示此类符号的地方(例如,因为您的字体不有它,并使用 ? 作为 'I do not have this symbol in my font file' 的占位符符号;它通常是一个框符号),或者您将输出发送到某个地方,错误地假定发送的内容不是 UTF-8。

File的静态方法classe.i

public static List<String> readAllLines(Path path) throws IOException

是从文件中读取所有行。使用 UTF-8 字符集将文件中的字节解码为字符。此方法调用等效于计算表达式:

 Files.readAllLines(path, StandardCharsets.UTF_8)

文件可能包含一些垃圾或 UTF-8 字符集格式不正确的内容。手动检查文件中的文本一次:p