提问者:小点点

Files.ReadAllLines()无法正确读取所有字符


我有一个简单的文本文件,它只包含一个字符'≤'。 没别的了。 此文件采用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();
            }

在我的示例中,我试图将该行打印到控制台和一个新文件中。 在这两种情况下,都会显示一个问号。

有什么解决的建议吗?


共2个答案

匿名用户

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