我正在尝试从html文件中读取一些文本,以特定方式修改它并将结果写入新的html文件中。但问题是文本不是用英文写的,结果一些字符被黑白替换“?”分数。在我的html文件中,我有< meta http-equiv="Content-Type" content="text/html; charset=utf-8">
。我究竟做错了什么?也许不是正确的读者和作家?
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new FileReader("inputFile.html"));
String line;
while ( (line = br.readLine()) != null) {
sb.append(line);
}
String result = doSomeChanges(sb);
BufferedWriter out = new BufferedWriter(new FileWriter("outputFile.html"));
out.write(result);
out.close();
答案 0 :(得分:5)
也许不是正确的读者和 作家?
完全。 FileReader
和FileWriter
是垃圾;忘了他们存在。它们隐式使用平台默认编码,不允许您覆盖此默认值。
相反,请使用:
BufferedReader br = new BufferedReader(
new InputStreamReader(new FileInputStream("inputFile.html"), "UTF-8"));
BufferedWriter out = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream("outputFile.html"), "UTF-8"));
答案 1 :(得分:2)
FileReader
和FileWriter
使用平台默认编码,这不是您想要的。 (我一直认为这是这些API中的一个致命缺陷。)
相反,请分别使用FileInputStream
和FileOutputStream
包含InputStreamReader
和OutputStreamWriter
。这允许您显式设置编码 - 在这种情况下应该是UTF-8。
答案 2 :(得分:1)
您使用BufferedReader,它会忽略文件的html结构。这就是为什么<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
没有效果。
试试这个:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("zzz"), "utf8")));
答案 3 :(得分:1)
为了让生活更轻松,您还可以使用FileUtils项目中的Apache Commons IO,该项目具有读取和编写考虑编码的文件和字符串的方法。