在用BufferedReader和BufferedWriter讀寫文件的過程中,發(fā)現(xiàn)寫的文件中如果含有中文字符會有亂碼的情況昼蛀。
假設(shè)想把http://www.baidu.com百度首頁的內(nèi)容替換為自己想自定義的內(nèi)容棕兼,代碼如下:
/**
* 通過網(wǎng)頁URL獲取源碼
* @param getUrl
*/
public static void catchHtmlCode(String getUrl){
String filePath = "D:/test/test.html";
BufferedReader buffreader = null;
BufferedWriter writer = null;
try {
URL u = new URL(getUrl);
URLConnection connection = u.openConnection();
InputStream inputStream = connection.getInputStream();
buffreader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
StringBuffer buff = new StringBuffer();
String line;
while (null != (line = buffreader.readLine())) {
buff.append(line);
}
String html = buff.toString();
Document doc = Jsoup.parse(html);
Element body = doc.body();
Element div = body.select(".head_wrapper").first();
/*替換指定的html標(biāo)簽內(nèi)容*/
div.html("<h1 style='font-size:30px'>我已將指定的html標(biāo)簽內(nèi)容替換為空</h3>");
writer = new BufferedWriter(new FileWriter(filePath, false));
writer.write(doc.html());
writer.flush();
} catch (Exception e) {
e.printStackTrace();
}finally {
FileUtils.closeStream(buffreader);
FileUtils.closeStream(writer);
}
}
當(dāng)我們使用以下方式創(chuàng)建流時陡舅,可能會出現(xiàn)中文亂碼,(程序斷點查看獲取到的中文字符沒有亂碼伴挚,是寫完文件之后打開亂碼靶衍,那就和具體生成文件默認(rèn)打開編碼設(shè)置有關(guān))
writer = new BufferedWriter(new FileWriter(filePath, false));
所以我們可以在創(chuàng)建流的時候指定編碼,如下:
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(filePath)),"utf-8"));
這樣就解決了亂碼的問題茎芋。也可以設(shè)置為“GBK”等格式颅眶,看自己需求。
運行結(jié)果:
public static void main(String[] args) {
catchHtmlCode("http://www.baidu.com");
}
原文作者技術(shù)博客:http://www.reibang.com/u/ac4daaeecdfe
95后前端妹子一枚田弥,愛閱讀涛酗,愛交友,將工作中遇到的問題記錄在這里,希望給每一個看到的你能帶來一點幫助煤杀。
歡迎留言交流眷蜈。