【中文乱码】HttpServletResponse PrintWriter中文乱码解决方法
HttpServletResponse使用PrintWriter输出中文的时候,如果不设置流的编码就会产生乱码,PrintWriter直接输出的字符流首先使用"response.setCharacterEncoding(charset)"设置字符以什么样的编码输出到浏览器,如果不设置则默认是ISO-8859-1,这个是不支持中文的。
解决方法
public void outputChineseByPrintWriter(HttpServletResponse response) throws IOException{
String data = "javaschool免费在线java教程";
//通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码
//response.setHeader("content-type", "text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");//设置将字符以"UTF-8"编码输出到客户端浏览器
/**
* PrintWriter out = response.getWriter();这句代码必须放在response.setCharacterEncoding("UTF-8");之后
* 否则response.setCharacterEncoding("UTF-8")这行代码的设置将无效,浏览器显示的时候还是乱码
/
PrintWriter out = response.getWriter();//获取PrintWriter输出流
/*
* 多学一招:使用HTML语言里面的标签来控制浏览器行为,模拟通过设置响应头控制浏览器行为
* out.write("");
* 等同于response.setHeader("content-type", "text/html;charset=UTF-8");
*/
out.write(data);//使用PrintWriter流向客户端输出字符
}
HttpServletResponse.setCharacterEncoding("UTF-8");设置将字符以"UTF-8"编码输出到客户端浏览器,然后再使用HttpServletResponse.getWriter();获取PrintWriter输出流,这两个步骤不能颠倒.
原文参考: http://www.51gjie.com/javaweb/966.html#:~:text=HttpServletResponse使用PrintWriter输出中文的时候,如果不设置流的 编码 ,%E5%B0%B1%E4%BC%9A%E4%BA%A7%E7%94%9F%E4%B9%B1%E7%A0%81%EF%BC%8CPrintWriter%E7%9B%B4%E6%8E%A5%E8%BE%93%E5%87%BA%E7%9A%84%E5%AD%97%E7%AC%A6%E6%B5%81%E9%A6%96%E5%85%88%E4%BD%BF%E7%94%A8%22response.setCharacterEncoding%20%28charset%29%22%E8%AE%BE%E7%BD%AE%E5%AD%97%E7%AC%A6%E4%BB%A5%E4%BB%80%E4%B9%88%E6%A0%B7%E7%9A%84%E7%BC%96%E7%A0%81%E8%BE%93%E5%87%BA%E5%88%B0%E6%B5%8F%E8%A7%88%E5%99%A8%EF%BC%8C%E5%A6%82%E6%9E%9C%E4%B8%8D%E8%AE%BE%E7%BD%AE%E5%88%99%E9%BB%98%E8%AE%A4%E6%98%AFISO-8859-1%EF%BC%8C%E8%BF%99%E4%B8%AA%E6%98%AF%E4%B8%8D%E6%94%AF%E6%8C%81%E4%B8%AD%E6%96%87%E7%9A%84%E3%80%82

浙公网安备 33010602011771号