做抓取新闻页面时,内容里 空格竟然变成问号, 主要是新华网,别的网站没有,但是新华网有的网页也不会变成问号 如<p>????帕特里奥塔表示,巴西新政府高度重视发展对华关系,认为中国是重要的战略伙伴。巴方愿同中方共同努力,进一步推进双方各领域合作,加强双方在重大国际和地区问题上的沟通,推动两国战略伙伴关系深入发展。</p>
<p>????外交部长杨洁篪、商务部长陈德铭和巴西发展工业外贸部长皮门特尔参加会见。</p>不知道原因有知道的吗?
知道的话 在加50分(http://topic.csdn.net/u/20110302/18/448a3f47-ff93-454a-981f-bd4426858c92.html这个链接 回复一下就行)代码是:import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;public class Test {
public static void main(String aargs[]){
URL url;
try {
url = new URL("http://news.xinhuanet.com/2011-03/03/c_121146024.htm");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
InputStream in = null;
in = url.openStream();
String content = pipe(in,"utf-8");
System.out.println(content);
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}
}
static String pipe(InputStream in,String charset) throws IOException {
StringBuffer s = new StringBuffer();
if(charset==null||"".equals(charset)){
charset="utf-8";
}
String rLine = null;
BufferedReader bReader = new BufferedReader(new InputStreamReader(in,charset));
PrintWriter pw = null;
FileOutputStream fo = new FileOutputStream("../index.html");
OutputStreamWriter writer = new OutputStreamWriter(fo, "utf-8");
pw = new PrintWriter(writer);
while ( (rLine = bReader.readLine()) != null) {
String tmp_rLine = rLine;
int str_len = tmp_rLine.length();
if (str_len > 0) {
s.append(tmp_rLine+"\n");
pw.println(tmp_rLine);
pw.flush();
}
tmp_rLine = null;
}
in.close();
pw.close();
return s.toString();
}
}
大家试一试 到底什么原因
<p>????外交部长杨洁篪、商务部长陈德铭和巴西发展工业外贸部长皮门特尔参加会见。</p>不知道原因有知道的吗?
知道的话 在加50分(http://topic.csdn.net/u/20110302/18/448a3f47-ff93-454a-981f-bd4426858c92.html这个链接 回复一下就行)代码是:import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;public class Test {
public static void main(String aargs[]){
URL url;
try {
url = new URL("http://news.xinhuanet.com/2011-03/03/c_121146024.htm");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
InputStream in = null;
in = url.openStream();
String content = pipe(in,"utf-8");
System.out.println(content);
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}
}
static String pipe(InputStream in,String charset) throws IOException {
StringBuffer s = new StringBuffer();
if(charset==null||"".equals(charset)){
charset="utf-8";
}
String rLine = null;
BufferedReader bReader = new BufferedReader(new InputStreamReader(in,charset));
PrintWriter pw = null;
FileOutputStream fo = new FileOutputStream("../index.html");
OutputStreamWriter writer = new OutputStreamWriter(fo, "utf-8");
pw = new PrintWriter(writer);
while ( (rLine = bReader.readLine()) != null) {
String tmp_rLine = rLine;
int str_len = tmp_rLine.length();
if (str_len > 0) {
s.append(tmp_rLine+"\n");
pw.println(tmp_rLine);
pw.flush();
}
tmp_rLine = null;
}
in.close();
pw.close();
return s.toString();
}
}
大家试一试 到底什么原因
解决方案 »
- 关于函数调用的问题。。
- 加密求解,算法高手请来
- struts 的mvc与spring的mvc有什么区别?
- JSP页面错误后,返回保存输入的信息。
- 如何处理struts2 file标签的格式问题
- 请教 java NIO中non-blocking的问题!!!
- 求一个用struts处理多文件上传的例子?
- jboss-3.2.1_tomcat-4.1.24安装!调试!急!
- jbuilder 里面 开发CMP 建立客户端测试地时候出现错误 javax.naming.ConfigurationException. Root exception is java.rmi.MarshalExce
- 求大神们帮帮忙啊,hibernate查询表中的总条数,但是报错
- hibernate中update()方法疑问。
- 问个小问题
要是能替换 我也不会这么着急了
你悲剧了,那个网页上编码有问题,比如说你有时候在网页上拷贝的代码不能在eclipse里保存,会提示编码格式不正确,这时候你删除几个空格就可以保存了,有时候会选择在windows底下强制保存,这个乱码很可能就是他们开发时候这样来的。
现在唯一的解决办法就是replaceAll了,替换所有的四个问号,要快的好只有这样了
可能是问号的编码问题 不知道是什么格式的 复制上去也不行 试了别的也不行 是不是我的IDE有问题i啊 不会吧
Pattern p = Pattern.compile(regEx);
String stra = " 高ah?蒚";
Matcher matcher = p.matcher(stra);
System.out.println(matcher.replaceAll(""));
不知道这样能不能满足你的要求
dsp = new String(dsp.getBytes(),"GBK").replace('?', ' ').replace(' ', ' ')
;
麻烦哥们解释一下 什么意思 顺便再http://topic.csdn.net/u/20110302/18/448a3f47-ff93-454a-981f-bd4426858c92.html 这个网址回复一下 那儿也有50分 给你分 谢谢!
是因为空格是 转义过的,这个 抓下来出现了乱码"????",所以要单独对 处理,我原先写过一个方法,忘记了,可以给你查查
content = new String(content.getBytes(),"gb2312").replace("????", " ").replace(' ', ' ');
String s = "????";
byte[] b = s.getBytes();
for(byte by : b){
by = (byte) ((by >> 1) + 1);
System.out.println((char)by);
}意思就是????的ascii码是63,对应的二进制是111111,然后空格的ascii是32,对应的二进制是100000,先进性右移操作在+1得到byte,值为32,即空格的ascii码,然后直接转成char就得到了空格,右移运算也可以直接改为&运算,即为by = (byte) (by & 100000);
我也不清楚,可能是编码问题?但是我原先抓取都设置过和页面一样的编码拿下来,中文没问题,就只有这个 会出现乱码,不知道什么情况。中文没问题就说明不是编码方式不同造成的乱码
for(byte by : b){
by = (byte) ((by >> 1) + 1);
System.out.println((char)by);
}
用我这个方法,你只需要传一个string进来,会帮你把所有的?都换成空格,这样行吗?问题可是原本应该是?的地方也换成空格了。。
String s = "????aa";
byte[] b = s.getBytes();
for(byte by : b){
if(by == 63)
by = (byte) (by & 100000);
System.out.print((char)by);
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);
sb.append((char)by);
}
return sb.toString();
}
给你写个方法,调用这个,往里面传你抓下来的内容就行了
还是不行 <p>????新华网北 乱码谢了
首先吧那个字符拷贝用java的replace方法替换掉就可以了。那个字符不是全角空格很诡异,没弄清楚是什么字符。