使用urlconnection做抓取的同學(xué)應(yīng)該一開(kāi)始都是使用這個(gè)吧。OK回到正題來(lái).....
在內(nèi)容己有中文、英文己正常顯示,仍然會(huì)有部分中文或英文出現(xiàn)亂碼,這是為什么呢?這個(gè)問(wèn)題一直在心里盤旋...真TM的蛋疼....
網(wǎng)上己有解決方案了,,其實(shí)這個(gè)跟各位開(kāi)始學(xué)習(xí)與使用java的資料有關(guān)。
網(wǎng)上大部分代碼都是如下:
byte[] by = new byte[20000];StringBuffer strBuffer = new StringBuffer();int len = 0;while ((len = urlStream.read(by, 0, by.length)) != -1) {strBuffer.append(new String(by, 0, len, "utf-8"));}這種寫法就會(huì)導(dǎo)致抓回的代碼中有字符出現(xiàn)亂碼。
來(lái)分析下原因:將數(shù)據(jù)流截?cái)啵╞y數(shù)組最大長(zhǎng)度為20000),再轉(zhuǎn)碼扔進(jìn)StringBuffer中。這種必然會(huì)導(dǎo)致內(nèi)容出現(xiàn)亂碼。
那我們?cè)趺唇鉀Q這個(gè)問(wèn)題呢?
BufferedReader reader=new BufferedReader(new InputStreamReader(urlStream,"utf-8"));StringBuffer strBuffer = new StringBuffer();String line=null;while((line=reader.readLine())!=null){strBuffer.append(line);}將數(shù)據(jù)流先轉(zhuǎn)碼,再加入到StringBuffer中....就不會(huì)有截?cái)鄦?wèn)題了,也就不會(huì)有亂碼了,亂碼是有數(shù)據(jù)被截?cái)嗔耍緛?lái)好好的兩字節(jié)被截成只剩一個(gè)字節(jié),還要解碼,不是亂碼會(huì)是什么?
小伙伴們你們現(xiàn)在明白了嗎?
更多博客請(qǐng)看這里:http://m.survivalescaperooms.com/jackicalSong/
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注