写入时的编码方式设置了吗? 或者转成string 然后写入txt
编码我也设置了的,和网页编码一样,我扒取下来的文字数据都没错,但就是 多出了 一连串的方块形状乱码,而且这个方块之后的数据(如标签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(); }
小弟谢谢了
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; }