在用java做豆瓣api应用时,发现一个问题,在搜索的时候,关键字里只能有数字和英文,含有汉字的话会出异常。 大家可以试试这个网址 http://api.douban.com/music/subjects?q=许嵩&start-index=1 用chrome可以正常打开,但ie和firefox都无法打开 。显示 wrong encoding.。。在这里深深赞chrome一个。 现在知道错误在哪儿 就好办了。 我开
在用java做豆瓣api应用时,发现一个问题,在搜索的时候,关键字里只能有数字和英文,含有汉字的话会出异常。
大家可以试试这个网址
http://api.douban.com/music/subjects?q=许嵩
用chrome可以正常打开,但ie和firefox都无法打开 。显示 wrong encoding.。。在这里深深赞chrome一个。
现在知道错误在哪儿 就好办了。
我开始没有用httpclient,蛤用URL类自己写的读网络(现在知道还是必须得用,因为URL类我只会GET方法,不会put delete.。说来惭愧啊,我都没听说过还有delete方法。)
看代码吧
ReadFromURL.java
package org.zzp.douban;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
/**
* @author Tony 功能:通过url从网络读取数据
*/
public class DD {
private URL url = null;
public DD(String url) {
try {
this.url = new URL(url);
} catch (MalformedURLException e) {
System.out.println("url错误");
e.printStackTrace();
}
}
/**
* @return Document通过URL从网络读取到的内容。org.dom4j.Document格式
*/
public Document getDocument() {
// 构建输入流等
URLConnection uc = null;
InputStream in = null;
BufferedReader br = null;
StringBuffer sb = new StringBuffer();
try {
uc = url.openConnection();
} catch (IOException e) {
System.out.println("打开url连接失败");
e.printStackTrace();
}
try {
in = uc.getInputStream();
} catch (IOException e) {
System.out.println("从url打开输入流失败");
e.printStackTrace();
}
try {
br = new BufferedReader(new InputStreamReader(in,"UTF-8"));
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// 开始从网络读取数据
String line = null;
try {
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
System.out.println("从url输入流中读取数据失败");
e.printStackTrace();
} finally {
try {
br.close();
in.close();
} catch (IOException e) {
System.out.println("关闭流失败");
e.printStackTrace();
}
}
Document doc = null;
try {
doc = DocumentHelper.parseText(sb.toString());
} catch (DocumentException e) {
e.printStackTrace();
}
return doc;
}
}
注意红色的这句,用UTF-8进行编码的。
那也把关键词编码为UTF-8就可以了
url.append("&q=" + URLEncoder.encode(q,"UTF-8"));