BufferedReader读取InputStream中文乱码问题

BufferedReader读取InputStream中文乱码问题

最近做项目用到BufferedReader读取在线connection获取的InputStream中文,结果出现了乱码问题,查了很多方法,总结有以下几种:

一. 将BufferedReader中加入encoding。

比如需要获取中文时需要的语句为:
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String result = "";
String line = null;
while ((line = in.readLine()) != null) {
      result += "|"+line;
}
return result;
那么当获取的字段为乱码时,可以添加encoding:
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(),"GBK"));
String result = "";
String line = null;
while ((line = in.readLine()) != null) {
      result += "|"+line;
}
return result;
但是这时我的代码使用"GBK","GB2312","UTF-8"均获取的中文还是乱码,而且"GBK"好一些,出现的是汉字,只不过是一些不成话语的生僻字,至于"UTF-8"就是一堆问号加上符号或是其他语言的字母,然后我就使用了第二种方法试了试。

二. 更换读取方式。

从以上的代码来看,我的读取方式是直接获取到String里,有人说问题是读取的字符位数不同导致乱码,所以添加了StringBuilder,或者StringBuffer:
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(),"GBK"));
StringBuffer result = new StringBuffer();
String line = null;
while (in.ready()) {
      result.append((char)in.read());
}
return result.toString();
但是问题是仍旧是乱码,跟第一种方式结果相同,依旧没有解决问题,最后我找到了问题所在。

三. 转换编码方式。

由于"GBK"可以显示中文,所以我打算通过这个位置入手,结果只是改变了一下输出时读取编码的方式,就可以将传输回来的"GBK"编码的乱码中文变成正常的"UTF-8"编码中文。
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(),"GBK"));
String result = "";
String line = null;
while ((line = in.readLine()) != null) {
      System.out.println(new String(line.toString().getBytes("GBK"),"UTF-8"));
      result += "|"+line;
}
result = new String(result.toString().getBytes("GBK"),"UTF-8");
return result;
然后就这样解决了乱码的问题。最后感谢各个论坛以及博客的讲解。

你可能感兴趣的:(随笔)