請求返回亂碼
最近在搞 retrofit 2.0 + OKHttp 網(wǎng)絡請求的時候(個人喜歡瞎搞)侮穿,想測試一下是否可以請求到數(shù)據(jù)阅仔,所以從網(wǎng)上搜一下免費的 api 來測試奋早。
國家氣象局提供的天氣預報接口:
- http://www.weather.com.cn/data/sk/101010100.html
- http://www.weather.com.cn/data/cityinfo/101010100.html
很開心可以找到一個不用注冊的 api兜粘,結果卻意外地獲取不到數(shù)據(jù)绞绒,看一下日志返回的數(shù)據(jù)是一堆亂碼拦耐,臉一下子就黑了 T_T耕腾。
經(jīng)過一陣瞎搞,終于發(fā)現(xiàn)這丫的居然用的是 gb2312 編碼 杀糯,不愧是國家氣象局扫俺,就是愛國。既然不是一般規(guī)定的 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 。