想向浏览器写出一段数据,只要将这段数据写入HTTP响应的实体内容中就行了。
ServletOutputStream getOutputStream()
Returns a ServletOutputStream suitable for writing binary data in the response.
PrintWriter getWriter()
Returns a PrintWriter object that can send character text to the client.
这两个方法是指向response缓冲区的流,写入的数据最终会成为HTTP响应的实体内容。所以,只要通过这俩流,就可以将数据打给浏览器了
(1)字节流
OutputStream out = response.getOutputStream();
//out.write("中国".getBytes());//如果不指定编码,用的就是平台码(gbk)
response.setHeader("Content-Type","text/html;charset=utf-8");//通知浏览器用utf-8打开
out.write("中国".getBytes("UTF-8"));//--通过utf-8发送
此种方式如果想要防止中文乱码,可以设置响应头Content-Type,通知浏览器当前发送过去的数据是什么编码格式,浏 览器自动就会用这个编码格式解析数据了。
如果不通知,则浏览器默认使用平台码解析数据
(2)字符流
response.getWriter().write("xxx");
利用字符流向外输出数据时,服务器默认用iso8859-1将字符转为字节后输出,如果输出汉字,由于iso8859-1中没有汉字字符,产生乱码
此时可以设置response.setCharacterEncoding("")通知服务器用什么编码集将字符转为字节
再通过response.setHeader("Content-Type","text/html;charset=xxx")通知浏览器以什么编码打开
只要发送和打开时编码一致就不会有乱码问题了。
另外,只要设置过response.setHeader("Content-Type","text/html;charset=xxx")服务器自动识别编码会自动设置response.setCharacterEncoding("")
而response.setHeader("Content-Type","text/html;charset=utf-8")可以简写成response.setContentType("text/html;charset=utf-8");
**最终的结论:
只要在输出数据之前,设置response.setContentType("text/html;charset=xxxx");就可以解决乱码问题,一行代码,搞定所有响应乱码
**细节1:从response中获取的流,会在Service方法结束后由服务器自动关闭,我们自己不需要关。
**细节2:getWriter()和getOutputStream()是互斥的,调用了其中的一个,就不能再调用另一个。
ServletOutputStream getOutputStream()
Returns a ServletOutputStream suitable for writing binary data in the response.
PrintWriter getWriter()
Returns a PrintWriter object that can send character text to the client.
这两个方法是指向response缓冲区的流,写入的数据最终会成为HTTP响应的实体内容。所以,只要通过这俩流,就可以将数据打给浏览器了
(1)字节流
OutputStream out = response.getOutputStream();
//out.write("中国".getBytes());//如果不指定编码,用的就是平台码(gbk)
response.setHeader("Content-Type","text/html;charset=utf-8");//通知浏览器用utf-8打开
out.write("中国".getBytes("UTF-8"));//--通过utf-8发送
此种方式如果想要防止中文乱码,可以设置响应头Content-Type,通知浏览器当前发送过去的数据是什么编码格式,浏 览器自动就会用这个编码格式解析数据了。
如果不通知,则浏览器默认使用平台码解析数据
(2)字符流
response.getWriter().write("xxx");
利用字符流向外输出数据时,服务器默认用iso8859-1将字符转为字节后输出,如果输出汉字,由于iso8859-1中没有汉字字符,产生乱码
此时可以设置response.setCharacterEncoding("")通知服务器用什么编码集将字符转为字节
再通过response.setHeader("Content-Type","text/html;charset=xxx")通知浏览器以什么编码打开
只要发送和打开时编码一致就不会有乱码问题了。
另外,只要设置过response.setHeader("Content-Type","text/html;charset=xxx")服务器自动识别编码会自动设置response.setCharacterEncoding("")
而response.setHeader("Content-Type","text/html;charset=utf-8")可以简写成response.setContentType("text/html;charset=utf-8");
**最终的结论:
只要在输出数据之前,设置response.setContentType("text/html;charset=xxxx");就可以解决乱码问题,一行代码,搞定所有响应乱码
**细节1:从response中获取的流,会在Service方法结束后由服务器自动关闭,我们自己不需要关。
**细节2:getWriter()和getOutputStream()是互斥的,调用了其中的一个,就不能再调用另一个。