尝试使用Java在html文件中读取和写入时出现编码错误

时间:2010-08-18 08:41:03

标签: java html encoding

我正在尝试从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(); 

4 个答案:

答案 0 :(得分:5)

  

也许不是正确的读者和   作家?

完全。 FileReaderFileWriter是垃圾;忘了他们存在。它们隐式使用平台默认编码,不允许您覆盖此默认值。

相反,请使用:

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)

FileReaderFileWriter使用平台默认编码,这不是您想要的。 (我一直认为这是这些API中的一个致命缺陷。)

相反,请分别使用FileInputStreamFileOutputStream包含InputStreamReaderOutputStreamWriter。这允许您显式设置编码 - 在这种情况下应该是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,该项目具有读取和编写考虑编码的文件和字符串的方法。