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获得字符流缓冲区的编码和设置浏览器默认打开时候采用的字符集一致即可。
字符流向页面响应中文,有一种简化的方式:
本文介绍了在使用Response对象响应中文时可能出现的乱码问题及其解决方法。针对使用字节流和字符流两种情况,分析了乱码产生的原因,并提供了解决方案。对于字节流,需确保转换字符集与浏览器默认字符集一致;对于字符流,需要设置响应的缓冲区编码,使其与浏览器默认设置匹配。
585

被折叠的 条评论
为什么被折叠?



