【发布时间】:2018-02-14 19:01:54
【问题描述】:
我编写了一个从文本文件中读取并删除所有换行符和双空格的 Java 程序。它一直按预期工作,直到最近它必须读取一个带有“字符”的文本文件。我不知道为什么,但它把“”字符读作一个我不认识的奇怪的亚洲字符。
重现步骤:
在 input.txt 中放置一个 ” 字符
运行程序
预期结果:
”字符放在input.txt中
实际结果
在input.txt中放置了一个奇怪的字符代码
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException, UnsupportedFlavorException{
String line = null;
String fileName = "Input.txt";
FileReader fileReader = new FileReader(fileName);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String output = "";
while((line = bufferedReader.readLine()) != null) {
output += (line + "\n");
}
output = output.replaceAll("-\n", "");
output = output.replaceAll("\n", " ");
output = output.replaceAll(" ", " ");
System.out.println(output);
FileWriter fileWriter = new FileWriter(fileName);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(output);
bufferedReader.close();
bufferedWriter.close();
}
}
我可以使用 println 将 ” 字符打印到 System.out,我什至可以将其从字符转换为字符串,而无需将其更改为另一个字符。我怀疑 bufferedReader/Writer 或 fileReader/Writer 损坏了 ” 字符,尽管我在文档中找不到任何关于字符限制的信息。有没有人遇到过这个问题?真的希望它发生是因为一些非常明显的事情,我只是愚蠢。
编辑:我使用的是 Windows 10,文件使用的是 UTF-8 字符集
【问题讨论】:
-
文件使用哪种字符集编码?
-
@MickMnemonic 根据 Notepad++,它是 UTF-8
-
你没有说你在哪个操作系统上。如果是 Windows,则默认字符集可能是 ISO-8859-1,因此 UTF-8 输入被错误地解释。使用指定 UTF-8 的显式
InputStreamReader并将其包裹在FileInputStream -
@JimGarrison 我使用的是 Windows 10,文件使用 UTF-8 编码。我会尝试使用 inputStreamReader。
-
或
Files.newBufferedReader,在未指定字符集时始终使用UTF-8。