JSOUP教程,JSOUP 亂碼處理,JSOUP生僻字亂碼解決方案


JSOUP亂碼情況產生 這幾天我用 JSOUP 多線程的方式,爬取了200 多萬數據,數據為各地的地名相關。結果有小部分數據,不到 1 萬亂碼。我先檢查了我的編碼為UTF-8 ,覺得應該沒有問題。代碼基本如下如下: try{ doc = Jsoup.connect(url) .header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0") .header("Connection", "close")//如果是這種方式,這里務必帶上 .timeout(8000)//超時時間 .get(); } catch (Exception e) {//可以精確處理timeoutException //超時處理 }

而我后來我查看了對方的頁面編碼,發現對方的頁面編碼為 GBK ,而返回數據為GB2312 ,那我們先嘗試一下GBK 。

JSOUP亂碼解決 其實在這里如果返回的 Document 亂碼,就不用去再做轉碼了。比如有同學類似這樣: String str = new String(docStr.getBytes("GBK"), "UTF-8");

其實沒有太大作用, JSOUP 支持在請求的時候,傳入URL 對象,然后設置編碼。如下方式才是正解,設置編碼為GBK 。 doc = Jsoup.parse(new URL(url).openStream(), "GBK", url);

這里順便貼一下,編碼設置后並且設置請求頭信息的模擬。較為詳細的 Demo 。 URL url = new URL("http://www.sojson.com"); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); //默認就是Get,可以采用post,大小寫都行,因為源碼里都toUpperCase了。 connection.setRequestMethod("GET"); //是否允許緩存,默認true。 connection.setUseCaches(Boolean.FALSE); //是否開啟輸出輸入,如果是post使用true。默認是false //connection.setDoOutput(Boolean.TRUE); //connection.setDoInput(Boolean.TRUE); //設置請求頭信息 connection.addRequestProperty("Connection", "close"); //設置連接主機超時(單位:毫秒)
connection.setConnectTimeout(8000);
//設置從主機讀取數據超時(單位:毫秒)
connection.setReadTimeout(8000);
//設置Cookie connection.addRequestProperty("Cookie","你的Cookies" ); //開始請求 Document doc = Jsoup.parse(connection.getInputStream(), "GBK", "http://www.sojson.com");

//TODO ---

哦了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM