使用HttpUrlConnection 调用Get请求时,返回的中文出现乱码现象,如下图:
用接口调试工具(apiPost),调试,发现“请求头” 是 “Accept-Encoding” :“gzip, deflate, br”
找了各种方法,最终换了种方式成功解决。
代码:
/**
*向指定URL发送GET方法的请求
* 可以解决Get请求返回中文乱码情况
* 请求报文头、程序报文头 Content-Encoding":"gzip"
* @param apiUrl 发送请求的URL
* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return result 所代表远程资源的响应结果
*/
public static String executeHttpGet(String apiUrl,String param) {
String result = null;
URL url = null;
HttpURLConnection connection = null;
InputStreamReader in = null;
String urlNameString = apiUrl + "?" + param;
try {
url = new URL(urlNameString);
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("GET");
connection.setRequestProperty("Content-type", "text/html");
connection.setRequestProperty("Accept-Charset", "UTF-8");
connection.setRequestProperty("contentType", "UTF-8");
if(connection.getResponseCode()== HttpURLConnection.HTTP_OK){
in = new InputStreamReader(connection.getInputStream(),"UTF-8");
BufferedReader bufferedReader = new BufferedReader(in);
StringBuffer stringBuffer = new StringBuffer();
String line = null;
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line);
}
result = stringBuffer.toString();
}
else{
result="网络连接错误,返回错误编码:"+connection.getResponseCode();
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
if (in != null) {
try {
in.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}
return result;
}