簡體   English   中英

嘗試使用Java在html文件中讀寫時出現編碼錯誤

[英]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(); 

也許不是合適的讀者和作家?

究竟。 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"));

FileReaderFileWriter使用平台默認編碼,這不是您想要的。 (我一直認為這是這些API中的致命缺陷。)

而是使用分別包裝在InputStreamReaderOutputStreamWriter中的FileInputStreamFileOutputStream 這使您可以顯式設置編碼-在這種情況下應為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM