[英]Encoding error while trying to read and write in html file with Java
我正在嘗試從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();
也許不是合適的讀者和作家?
究竟。 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"));
FileReader
和FileWriter
使用平台默認編碼,這不是您想要的。 (我一直認為這是這些API中的致命缺陷。)
而是使用分別包裝在InputStreamReader
和OutputStreamWriter
中的FileInputStream
和FileOutputStream
。 這使您可以顯式設置編碼-在這種情況下應為UTF-8。
您使用BufferedReader,它將忽略文件的html結構。 這就是為什么<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
不起作用的原因。
試試這個:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("zzz"), "utf8")));
為了使生活更輕松,您還可以使用來自Apache Commons IO項目的FileUtils ,該項目具有讀寫文件和考慮編碼的字符串的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.