需求比较简单,就是获取接口数据并返回。但是在用的过程中发现编码问题。接口返回的数据编码为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"));

编码正常。

posted on 2014-01-14 15:43  newyear821  阅读(1642)  评论(0编辑  收藏  举报