需求比较简单,就是获取接口数据并返回。但是在用的过程中发现编码问题。接口返回的数据编码为UTF-8,希望显示的数据也是UTF-8,问题出在从输入流中读取数据的过程中。下面是几个实例程序。
1、不管编码,直接写
public static String sendGet(String url , String param) {
String result = "";
try{
String urlName = url + "?" + param;
URL realUrl = new URL(urlName);
HttpURLConnection conn = (HttpURLConnection)realUrl.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
conn.connect();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
while((line = in.readLine()) != null){
result += line;
}
}catch(Exception e){
System.out.println("get出错了" + e);
e.printStackTrace();
}
finally{
try{
if(in != null){
in.close();
}
}catch(IOException ex){
ex.printStackTrace();
}
}
return result;
}
这个时候,返回数据优于编码不对,呈现乱码状态。下面进行修改。
2、第一次修改
第一次修改,是将获取到的result按照如下方法进行重新编码:
byte[] bs = result.getBytes();
result = new String(bs,"UTF-8");
修改后大部分数据编码正确,但是仍旧有部分不对,显示为???。多次尝试此方式,包括将result.getBytes()修改为result.getBytes(""UTF-8)都失败。
3、修改完成
最后发现应该在创建BufferedReader时候,加入编码,即将
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
修改为:
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
编码正常。