网页里面的空格是 转义过的。 抓下来出现了乱码"????",所以要单独对 处理。不然会变成?,虽然肉眼看见的是空格。
解决办法有以下几种:
1.因为????的ascii码是63,对应的二进制是111111,然后空格的ascii是32,对应的二进制是100000,先进行右移操作在+1得到byte,值为32,即空格的ascii码,
然后直接转成char就得到了空格,右移运算也可以直接改为&运算,即为by = (byte) (by & 100000);
注意:原有的?号也会被转成空格。
public static String changeStr(String s) {
StringBuffer sb = new StringBuffer(1024);
if(s == null)
return "";
byte[] b = s.getBytes();
for (byte by : b) {
if (by == 63) //是?才转
by = (byte) (by & 100000);//by = (byte) ((by >> 1) + 1);
sb.append((char)by);
}
return sb.toString();
}
2.把那个字符拷贝,用java的replace方法替换掉就可以了。
3.String dsp= 抓取的内容;
dsp = new String(dsp.getBytes(),"GBK").replace('?', ' ').replace(' ', ' ');//前面这个是全角空格
System.out.println(dsp);(中文会变成乱码)
4.因为HttpResponse输出的时候,getWriter的print方法使用了系统默认的编码方式,把格式又搞坏了。只要把response编码设置setCharacterEncoding()为目标页面的编码就可以了。(未测试)