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
我有一个简单的文本文件,其中只有一个字符“≤”。没有其他的。此文件采用 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