日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

htmlparser解析网站时服务器返回的文件编码和页面编码不一致问题

發(fā)布時間:2025/4/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 htmlparser解析网站时服务器返回的文件编码和页面编码不一致问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、用htmlparser解析http://gz.fang.com/拋出如下異常:

Exception in thread "main" org.htmlparser.util.EncodingChangeException: character mismatch (new: 【 [0x3010] != old: ?[0xa1?]) for encoding change from ISO-8859-1 to GB2312 at character offset 149
at org.htmlparser.lexer.InputStreamSource.setEncoding(InputStreamSource.java:279)
at org.htmlparser.lexer.Page.setEncoding(Page.java:864)
at org.htmlparser.tags.MetaTag.doSemanticAction(MetaTag.java:149)
at org.htmlparser.scanners.TagScanner.scan(TagScanner.java:68)
at org.htmlparser.scanners.CompositeTagScanner.scan(CompositeTagScanner.java:159)
at org.htmlparser.util.IteratorImpl.nextNode(IteratorImpl.java:91)
at org.htmlparser.Parser.parse(Parser.java:700)


發(fā)現(xiàn):在Parser parser = new Parser(src);parser.getEncoding();返回網(wǎng)站的編碼是?ISO-8859-1 ,但NodeList nodeList = parser.parse(null)解析http://gz.fang.com/頁面時,頁面設(shè)置的字符串<metahttp-equiv="Content-Type"content="text/html; charset=gb2312" />是gb2312,二者沖突異常;


2、經(jīng)查閱,可能是htmlparser的一個bug,通過修改Page類和InputStreamSource類源碼可解決,參考http://www.codeweblog.com/htmlparser-coding-problem/,該方法未試驗;


3、有人提出通過顯示設(shè)置字符集來解決,parser.setEncoding("GB2312");但仍無法解決;


該問題后續(xù)繼續(xù)研究如何解決,本文這里暫時先用httpurlclient輸出網(wǎng)頁文件,再用htmlparser解析網(wǎng)頁內(nèi)容,具體代碼如下:

public static void main(String[]args) throws Exception{UrlFilter uf=new UrlFilter();uf.httpForCoding("http://gz.fang.com/");}//先用httpurlclient輸出網(wǎng)頁文件,再用htmlparser解析,解決htmlparser編碼不一致問題public void httpForCoding(String src) throws ParserException { URL u = null; HttpURLConnection con = null; // 嘗試發(fā)送請求 try { u = new URL(src); con = (HttpURLConnection) u.openConnection(); con.setConnectTimeout(5*1000);con.setRequestMethod("GET"); StringBuffer buffer = new StringBuffer(); try { //一定要有返回值,否則無法把請求發(fā)送給server端。 BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8")); String temp; while ((temp = br.readLine()) != null) { buffer.append(temp); buffer.append("\n"); } } catch (Exception e) { e.printStackTrace(); }//用parser解析輸出內(nèi)容 Parser parser = new Parser(); parser.setInputHTML(buffer.toString()); NodeFilter linkFilter = new NodeClassFilter(LinkTag.class); NodeList nodeList = parser.parse(linkFilter);for(int i = 0; i <= nodeList.size(); i++){ if(nodeList.elementAt(i) instanceof LinkTag){ LinkTag tag = (LinkTag) nodeList.elementAt(i); String linkUrl = tag.getLink();// url System.out.println(linkUrl); }}} catch (Exception e) { e.printStackTrace();} finally { if (con != null) { con.disconnect(); } } }

總結(jié)

以上是生活随笔為你收集整理的htmlparser解析网站时服务器返回的文件编码和页面编码不一致问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。