今天因为项目里的一个天气接口挂掉了,然后更换新的接口,发现了一个较稳定、免费的接口;但在用java解析数据的时候,始终是乱码,很头疼,以此记录。
- 天气接口地址
天气接口地址天气接口返回的数据
后台java代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16URL url = new URL("http://wthrcdn.etouch.cn/WeatherApi?city=" + cityName);
connectionData = url.openConnection();
connectionData.setConnectTimeout(1000);
try {
br = new BufferedReader(
new InputStreamReader(connectionData.getInputStream(), "UTF-8"));
sb = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null)
sb.append(line);
} catch (SocketTimeoutException e) {
System.out.println("连接超时");
} catch (FileNotFoundException e) {
System.out.println("加载文件出错");
}
String datas = sb.toString();
但datas
里面的数据是乱码,很是头疼。
- 仔细检查,发现问题
每次请求返回的数据的 Content Encoding是gzip;故需要GZIPInputStream封装下connectionData.getInputStream()
。
调整如下:1
2br = new BufferedReader(new InputStreamReader(
new GZIPInputStream(connectionData.getInputStream()), "UTF-8"));
再次调试表示问题解决了,在使用第三方提供的接口的时候要注意他们返回信息的编码格式,然后使用对应的编码格式解析,谨记!