<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-295  評(píng)論-26  文章-1  trackbacks-0

    最近發(fā)現(xiàn)用htmlparser解析一些網(wǎng)頁(yè)時(shí),繁體中文會(huì)變成亂碼.分析了下原因,發(fā)現(xiàn)在用stringbean的時(shí)候htmlparser會(huì)自己根據(jù)meta來(lái)決定用哪種內(nèi)碼來(lái)解碼,而有的網(wǎng)站在meta中是用gb2312來(lái)做charset,實(shí)際應(yīng)用的時(shí)候又用到了gbk.gb2312是不能表示繁體的,所以就出現(xiàn)了亂碼.解決的辦法很簡(jiǎn)單,gbk是兼容gb2312的,所以在htmlparser的page.java的getcharser()那里加一句判斷,如果ret是gb2312就設(shè)置為gbk,這樣問(wèn)題就解決了.?

    修改的page.java的代碼如下(/lexer/page.java)


    ??? public String getCharset (String content)
    ??? {
    ??????? final String CHARSET_STRING = "charset";
    ??????? int index;
    ??????? String ret;

    ??????? if (null == mSource)
    ??????????? ret = DEFAULT_CHARSET;
    ??????? else
    ??????????? // use existing (possibly supplied) character set:
    ??????????? // bug #1322686 when illegal charset specified
    ??????????? ret = mSource.getEncoding ();
    ??????? if (null != content)
    ??????? {
    ??????????? index = content.indexOf (CHARSET_STRING);

    ??????????? if (index != -1)
    ??????????? {
    ??????????????? content = content.substring (index +
    ??????????????????? CHARSET_STRING.length ()).trim ();
    ??????????????? if (content.startsWith ("="))
    ??????????????? {
    ??????????????????? content = content.substring (1).trim ();
    ??????????????????? index = content.indexOf (";");
    ??????????????????? if (index != -1)
    ??????????????????????? content = content.substring (0, index);

    ??????????????????? //remove any double quotes from around charset string
    ??????????????????? if (content.startsWith ("\"") && content.endsWith ("\"")
    ??????????????????????? && (1 < content.length ()))
    ??????????????????????? content = content.substring (1, content.length () - 1);

    ??????????????????? //remove any single quote from around charset string
    ??????????????????? if (content.startsWith ("'") && content.endsWith ("'")
    ??????????????????????? && (1 < content.length ()))
    ??????????????????????? content = content.substring (1, content.length () - 1);

    ??????????????????? ret = findCharset (content, ret);

    ??????????????????? // Charset names are not case-sensitive;
    ??????????????????? // that is, case is always ignored when comparing
    ??????????????????? // charset names.
    //??????????????????? if (!ret.equalsIgnoreCase (content))
    //??????????????????? {
    //??????????????????????? System.out.println (
    //??????????????????????????? "detected charset \""
    //??????????????????????????? + content
    //??????????????????????????? + "\", using \""
    //??????????????????????????? + ret
    //??????????????????????????? + "\"");
    //??????????????????? }
    ??????????????? }
    ??????????? }
    ??????? }
    ??????? if(ret.equalsIgnoreCase("gb2312"))ret="GBK"; //to avoid decode problem
    ??????????????????????????????????????????????????????????????????????????????????????? ? ?//edited by linyunfan
    ??????? return (ret);
    ??? }

    ?

    在最后加入了這句

    ??????? if(ret.equalsIgnoreCase("gb2312"))ret="GBK";



    大盤(pán)預(yù)測(cè) 國(guó)富論
    posted on 2008-10-09 13:33 華夢(mèng)行 閱讀(1778) 評(píng)論(3)  編輯  收藏

    評(píng)論:
    # re: htmlparser解析一些網(wǎng)頁(yè)時(shí),繁體中文會(huì)變成亂碼 2008-12-28 22:01 | 繁體
    .。。  回復(fù)  更多評(píng)論
      
    # re: htmlparser解析一些網(wǎng)頁(yè)時(shí),繁體中文會(huì)變成亂碼 2009-03-11 15:45 | pnut
    不錯(cuò)。完全可以!
    用parser.setEncoding("gbk")是不起作用的,程序運(yùn)行時(shí)會(huì)用所抓網(wǎng)頁(yè)的“charset”覆蓋的。
    gbk是gb2312的超集,所以用gbk去處理gb2312的網(wǎng)頁(yè)完全沒(méi)有問(wèn)題,事實(shí)上,眾多網(wǎng)頁(yè)上所寫(xiě)的gb2312是不嚴(yán)謹(jǐn)?shù)?,IE也總是會(huì)忽略它而用gbk去展示的。但目前現(xiàn)狀是很多網(wǎng)站都在寫(xiě)gb2312,用博主的辦法處理是個(gè)好主意。
    補(bǔ)充一下,Page.java在httplexer.jar里,源碼可以去“http://sourceforge.net/projects/htmlparser/” 下載  回復(fù)  更多評(píng)論
      
    # re: htmlparser解析一些網(wǎng)頁(yè)時(shí),繁體中文會(huì)變成亂碼[未登錄](méi) 2011-08-07 15:53 | 小武
    我改成樓主說(shuō)的那樣了,還是不得呢?
    QQ:1161008015 可以加我qq交流一下嘛。  回復(fù)  更多評(píng)論
      

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 色www永久免费视频| 日日摸日日碰夜夜爽亚洲| 成人av片无码免费天天看| 日本牲交大片免费观看| 国产h肉在线视频免费观看| 亚洲国产精品一区第二页| 亚洲人成在线免费观看| 91精品国产免费入口| 亚洲第一精品电影网| 久久久久久久91精品免费观看| 亚洲视频免费在线播放| 精品国产sm捆绑最大网免费站| 亚洲成a人片在线观看中文app| 无码人妻一区二区三区免费| 亚洲午夜爱爱香蕉片| a级毛片免费网站| 亚洲AV无码久久| 全免费毛片在线播放| 亚洲日本在线电影| 亚洲精品麻豆av| 免费国产成人18在线观看| 国产美女无遮挡免费视频| 农村寡妇一级毛片免费看视频| 亚洲性在线看高清h片| 免费国产黄网站在线观看| 亚洲av无码国产综合专区| 国产大片线上免费看| 久久九九免费高清视频| 亚洲高清无在码在线无弹窗| 国产精品成人免费一区二区| 国产99久久亚洲综合精品| 亚洲国产精品国自产电影| 成熟女人特级毛片www免费| 一个人看的免费视频www在线高清动漫| 国产亚洲免费的视频看| 成年女人18级毛片毛片免费观看| 一级毛片大全免费播放下载 | 特级毛片A级毛片100免费播放| 最新亚洲成av人免费看| 桃子视频在线观看高清免费完整 | 一级做a爰全过程免费视频毛片|