sky小糊涂神 2016-10-20 01:27 采纳率: 85.7%
浏览 960
已采纳

java中文乱码问题,帮忙看下哪里有问题

//读取响应
BufferedReader reader = new BufferedReader(new InputStreamReader(
connection.getInputStream(),"utf-8"));
String lines;
StringBuffer sb = new StringBuffer("");
while ((lines = reader.readLine()) != null) {
lines = new String(lines.getBytes(),"utf-8");
//System.out.println(lines);
sb.append(lines);
}
str = sb.toString();
//System.out.println(str);
reader.close();

  • 写回答

7条回答 默认 最新

  • love_cooking 2016-10-20 16:09
    关注

    首先分析下你的代码:
    1. InputStreamReader 对于 connection 的数据流,是采用 UTF-8 把字节转换成字符
    2. lines.getBytes() 是采用系统的默认编码把字符解码成字节数组
    3. new String(lines.getBytes(),"utf-8") 又对解码后的字节数组采用 UTF-8 转换为字符。

    下面分析你的问题:
    1. 假设 connection 的数据流是 utf8 编码,而你的系统默认编码也是 utf-8, 那么中文字符问题是不肯能存在的,除非是数据问题
    2. 假设 connection 的数据流是 utf8 编码,而你的系统默认编码不是 utf-8, 那么中文字符问题是肯定存在的,即使按照你的方法,去掉lines后面的“utf-8”,这个问题还是会存在
    3. 假设 connection 的数据流不是 utf8 编码, 那么 InputStreamReader 读取时就会有问题了, 即使按照你的方法,去掉lines后面的“utf-8”,这个问题还是会存在.

    针对你的提问,我非常的好奇,不知道你是怎么解决的,呵呵,如果你想了解真相,建议你把 connection 获取的数据的编码以及系统的编码都发出来,如果还是没搞清楚,可以把 connection 获取的数据的字节数组发出来,我可以帮你分析分析。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 找一个QT页面+目标识别(行人检测)的开源项目
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
  • ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错
  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口