环境: linux debian
编码: UTF-8
描述: 我在代码中.把json字符串 放入流中 具体代码:
public static void writeDataStream(HttpServletResponse response,String dataStr)throws Exception{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
OutputStream os = null;
try {
dos.writeUTF(dataStr);
byte data [] = baos.toByteArray();
response.setCharacterEncoding("GBK");
response.setContentLength(data.length);
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("application/octet-stream");
os = response.getOutputStream();
os.write(data);
} catch (Exception e) {
e.printStackTrace();
throw e;
} finally {
if (os != null) {
os.close();
}
if (dos != null) {
dos.close();
}
if (baos != null) {
baos.close();
}
}
}
使用UTF-8 GBK都会抱如下错误:
请注意白色的地方.没有弄明白.有点诡异.!
客户端接受都正常,都是正确的json String.但是这个不停的打印错误,影响查找其他异常.
麻烦知道的给个提示.多谢了.
------解决方案--------------------
好象是解码失败。
图太小看不清
另外你试下下面的代码,看看结果如何
public static void writeDataStream(HttpServletResponse response,String dataStr)throws Exception{
try {
response.getWriter().write(dataStr);
} catch (IOException e) {
log.error("call error!" + e.getMessage(), e);
}
}
------解决方案--------------------
flush() 一定要记得调用,
------解决方案--------------------
json规范默认是utf-8,发的时候就要按这个规范
------解决方案--------------------
建议:
在你传之前可以utf-8编码一下,然后针对特殊的中文信息类型的可以先base64编码一下,然后在反编译一下就ok!