Response对象响应的中文乱码处理
1.1.1 Response向页面响应中文
1.1.1.1 使用字节流响应中文
l 编写代码
/**
* 使用字节流输出中文
* @param response
* @throws IOException
* @throws UnsupportedEncodingException
*/
private void test1(HttpServletResponse response) throws IOException, UnsupportedEncodingException {
// 使用字节流的方式输出中文:
ServletOutputStream outputStream = response.getOutputStream();
// 设置浏览器默认打开的时候采用的字符集
response.setHeader("Content-Type", "text/html;charset=UTF-8");
// 设置中文转成字节数组字符集编码
outputStream.write("中文".getBytes("UTF-8"));
}
****使用上述代码向页面输出中文是否会有乱码?
l 不一定
n 其实这个乱码的产生与中文转成字节数组及浏览器打开方式(打开的时候采用的默认字符集)有关
l 解决:
n 将中文转成字节数组的时候和浏览器默认打开的时候采用的字符集一致即可。
1.1.1.2 使用字符流响应中文
l 编写代码
/**
* 使用字符流输出中文
* @param response
* @throws IOException
* @throws UnsupportedEncodingException
*/
private void test2(HttpServletResponse response) throws IOException, UnsupportedEncodingException {
// 设置浏览器默认打开的时候采用的字符集:
// response.setHeader("Content-Type", "text/html;charset=UTF-8");
// 设置response获得字符流的缓冲区的编码:
// response.setCharacterEncoding("UTF-8");
// 简化代码
response.setContentType("text/html;charset=UTF-8");
// 会不会产生乱码
response.getWriter().println("中文");
}
****使用上述代码向页面输出中文是否会产生乱码?
l 一定乱码
n 原因:
u 字符流是有缓冲区的,response获得字符流,response设计默认的缓冲区编码是ISO-8859-1。这个字符集不支持中文的。
n 解决:
u 设置response获得字符流缓冲区的编码和设置浏览器默认打开时候采用的字符集一致即可。
字符流向页面响应中文,有一种简化的方式: