BufferedReader读取InputStream中文乱码问题

本文主要探讨了使用BufferedReader从InputStream读取中文数据时出现乱码的问题,提出了三种解决方案:1) 在BufferedReader初始化时指定正确的字符编码;2) 改变读取数据的方式;3) 对数据进行编码转换操作。通过这些方法,可以有效避免中文乱码现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
然后就这样解决了乱码的问题。最后感谢各个论坛以及博客的讲解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值