首页 新闻 搜索 专区 学院

网页源码内容存在'方块'乱码

0
悬赏园豆:10 [已关闭问题] 关闭于 2014-01-08 12:18

我采用IO流的方式读取网页源码内容,且打印源码内容在java控制台,内容存在'方块'乱码,网页编码GBK,我程序拔取编码也是GBK,程序扒取下来的网页内容都是对的,但问题是内容中多出了一长串方块 乱码,如何去删除,就此导致我无法进行下一步,求大神指点!!!!!

 

性感的瓦片的主页 性感的瓦片 | 菜鸟二级 | 园豆:216
提问于:2014-01-02 11:01
< >
分享
所有回答(2)
0

写入时的编码方式设置了吗? 或者转成string 然后写入txt

Zery | 园豆:6075 (大侠五级) | 2014-01-02 21:39

编码我也设置了的,和网页编码一样,我扒取下来的文字数据都没错,但就是  多出了  一连串的方块形状乱码,而且这个方块之后的数据(如标签font....,文字等)是复制不下来的,导致该网页的 数据只有一部分,

这是获取网页源码

URL urlObj = new URL(outputURL.toString());
//            URL urlObj = new URL(url);
            if (true) {
                // 设置http访问要使用的代理服务器的地址
                //备选地址
                //String [] proxys = {"58.17.3.2", "218.14.227.197(3128)", "121.207.252.139(US)", "211.76.175.5", "210.51.14.197", "121.207.252.139"};
                String proxyIP = "172.25.67.21";
                prop.setProperty("http.proxyHost",proxyIP);
                // 设置http访问要使用的代理服务器的端口
                prop.setProperty("http.proxyPort","123");
                
                String authentication = "username:password";
                String encodedLogin = new sun.misc.BASE64Encoder().encode(authentication.getBytes());
                HttpURLConnection con = (HttpURLConnection)urlObj.openConnection();
                /*自己的代码
                 *     javascript:s=documentElement.outerHTML;
                    document.write('<body></body>');
                    document.body.innerText = s;    
                 * 
                 *     int i = 0;
                    while(i<con.getContentLength()){
                    String casePageContent = (String) con.getContent();
                    String tempContent = "document.getElementById('cc').innerHTML=";
                    if(casePageContent.contains(tempContent)){
                        casePageContent.indexOf(tempContent);
                    }
                }*/
                con.setRequestProperty("Proxy-Authorization", " Basic "+encodedLogin);
                String strLine = "";

                webStream = new BufferedReader(new InputStreamReader(con
                        .getInputStream(), encoding));  //gbk

                strLine = webStream.readLine();
                while (strLine != null) {
                    sb.append(strLine + System.getProperty("line.separator"));
                    strLine = webStream.readLine();
                }
            } else {
                String strLine = "";
                webStream = new BufferedReader(new InputStreamReader(urlObj
                        .openStream(), encoding));

                strLine = webStream.readLine();
                while (strLine != null) {
                    sb.append(strLine + System.getProperty("line.separator"));
                    strLine = webStream.readLine();
                }
            }
        } catch (Exception e) {
            //log.warn("get the content failed: " + url);
            return null;
        } finally {
            if (webStream != null) {
                try {
                    webStream.close();
                } catch (IOException e) {
                }
            }
        }

        return sb.toString();
    }

小弟谢谢了

支持(0) 反对(0) 性感的瓦片 | 园豆:216 (菜鸟二级) | 2014-01-03 12:40
0
public static String getGBKString(String input, String source) {
    StringBuffer sb = new StringBuffer();

    for (int i=0; i<input.length(); i++) {
        char c = input.charAt(i);
        // 对网页源码流进行遍历,当遍历到'方块'字符时,传入方法isGBKSupported验证
        if (isGBKSupported(c)) {
            在此之前你的某种操作。。。。
            sb.append(c);
        }else{
            你的某种操作。。。。
        }
    }
}

public static boolean isGBKSupported(char c) {
    // 如果该字符为问号,则直接返回true,以免与不识别时候产生的问号混淆
    // 如果该字符为方块,则直接跳过,进行下一步
    if (c=='?'){
        return true;
    }
    
    Character ch = new Character(c);
    String sCh = ch.toString();
    try {
        byte[] bb = sCh.getBytes("gbk");
        if (bb.length > 1) {
            return true;
        } else if (bb.length==1 && bb[0] != 63 && bb[0] != 0) { //bb[0] != 0----> 表示 将'方块' 字符转换成byte数组,当bb[0] = 0时,则该字符为方块,return false。 不进行sb.append(c);操作。
            return true;
        }
    } catch (java.io.UnsupportedEncodingException ex) {
        return false;
    }
    return false;
}
性感的瓦片 | 园豆:216 (菜鸟二级) | 2014-01-08 11:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册