Java URLConnection utf8编码不起作用
我正在为网站编写一个只使用英语的小爬虫,并通过打开URL
连接来实现这一点。我在请求和InputStreamReader
上都将编码设置为utf-8
,但对于一些请求,我继续使用gobbledigook,而其他请求则可以正常工作
下面的代码代表了我所做的所有研究和建议。我也尝试过把URLConnection
改成HttpURLConnection
,但运气不好。返回的某些字符串仍然如下所示:
什么?RHPNc??]?DGo??Xj{x?“P$a?Qt?&;e?a?lfVx)?='b?”Y(defUeefee=@
我错过了什么
我的代码:
public static String getDocumentFromUrl(String urlString) throws Exception {
String wholeDocument = null;
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
conn.setRequestProperty("Content-Type", "text/plain; charset=utf-8");
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.setConnectTimeout(60*1000); // wait only 60 seconds for a response
conn.setReadTimeout(60*1000);
InputStreamReader isr = new InputStreamReader(conn.getInputStream(), "utf-8");
BufferedReader in = new BufferedReader(isr);
String inputLine;
while ((inputLine = in.readLine()) != null) {
wholeDocument += inputLine;
}
isr.close();
in.close();
return wholeDocument;
}
# 1 楼答案
服务器正在发送压缩的文档GZIP。您可以设置
Accept-Encoding
HTTP头,使其以纯文本形式发送文档即使如此,HTTP客户机类也为您处理GZIP压缩,因此您不必担心这样的细节。这里的情况似乎是服务器有问题:它不会发送
Content-Encoding
头来告诉您内容被压缩了。这种行为似乎取决于User-Agent
,因此该站点可以在常规web浏览器中工作,但从Java使用时会中断。因此,设置用户代理也解决了这个问题: