导航
导航

个别中文字符乱码问题

今天同事反馈遇到一个使用http客户端返回数据乱码问题,我当时第一反应就是charset编码格式问题,心里想着同事刚工作1年左右,经验不足很正常。然后隔空指导了准备秀一下操作的,然后翻车了。

打印了下日志发现是个别中文字符乱码问题,然后我改成UTF-8还是GBK还是ISO都没啥反应,这不能够啊。看来不能想当然了,得重视这个问题了。

大量中文返回的时候不能用EntityUtils.toString去处理,因为它内部实现有个1024的buffer操作,毕竟老外写得库,不会考虑中文。使用BufferedReader按行读取,或者使用ByteArrayOutputStream一次性全部读取再进行字符串编码处理。

....上面的代码省略
response = httpClient.execute(httpPost);
//解决返回中文个别字符乱码问题
//result = EntityUtils.toString(response.getEntity());
byte[] bytearray = EntityUtils.toByteArray(response.getEntity());
result = new String(bytearray, "UTF-8");