请求返回乱码
最近在搞 retrofit 2.0 + OKHttp 网络请求的时候(个人喜欢瞎搞),想测试一下是否可以请求到数据,所以从网上搜一下免费的 api 来测试。
国家气象局提供的天气预报接口:
- http://www.weather.com.cn/data/sk/101010100.html
- http://www.weather.com.cn/data/cityinfo/101010100.html
很开心可以找到一个不用注册的 api,结果却意外地获取不到数据,看一下日志返回的数据是一堆乱码,脸一下子就黑了 T_T。
经过一阵瞎搞,终于发现这丫的居然用的是 gb2312 编码 ,不愧是国家气象局,就是爱国。既然不是一般规定的 UTF-8 编码 ,就需要在请求头来添加编码格式。
mOKHttpClientBuilder = new OkHttpClient.Builder();
mOKHttpClientBuilder.connectTimeout(15, TimeUnit.SECONDS);
mOKHttpClientBuilder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.addHeader("Content-Type", "text/html; charset=gb2312")
.addHeader("Content-Type", "text/html; charset=UTF-8")
.addHeader("Accept-Encoding", "*")
.addHeader("Connection", "keep-alive")
.addHeader("Accept", "*/*")
.addHeader("Access-Control-Allow-Origin", "*")
.addHeader("Access-Control-Allow-Headers", "X-Requested-With")
.addHeader("Vary", "Accept-Encoding")
.addHeader("Cookie", "add cookies here")
.build();
return chain.proceed(request);
}
});
添加文件头之后就可以返回正常的 json 。