在用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"));