100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 4-2-在Servlet中解决中文输出乱码问题

4-2-在Servlet中解决中文输出乱码问题

时间:2023-01-04 03:15:28

相关推荐

4-2-在Servlet中解决中文输出乱码问题

一、创建ChineseServlet

public class ChineseServlet extends HttpServlet {private static final long serialVersionUID = -4526004697502051528L;public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String data = "中国";PrintWriter out = response.getWriter();out.println(data);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

二、分析乱码原因

http://localhost:8080/chapter04/ChineseServlet

response.getWriter()得到的字符输出流默认采用ISO-8859-1编码,该码表编码范围是0x00-0xFF,明显兼容不了中文,查不到的字符就编码为63,当浏览器解码时,默认采用GB2312,将63解码为?(因为在使用GB2312的程序中,通常采用EUC储存方法,以便兼容于ASCII)

那么把输出流的编码设为GB2312,行不行呢?

response.setCharacterEncoding("gb2312"); String data = "中国"; PrintWriter out = response.getWriter(); out.println(data);

行是行了,但我们一般采用utf-8,因为utf-8更通用,表示的字符更多。所以

response.setCharacterEncoding("utf-8");

再进行测试

乱码,刚才说了浏览器默认是gb2312,所以得通过某种方式告诉浏览器,我发过来的流是utf-8编码的哦,那么浏览器就给你utf-8解码。什么方式呢?设置响应消息头

response.setHeader("Content-Type", "text/html;charset=utf-8");

三、两种方式解决中文乱码

1.

response.setCharacterEncoding("utf-8");response.setHeader("Content-Type", "text/html;charset=utf-8");

分析了源码,发现第一行代码不要也可以,于是验证,结果也是正确的。

2.更简便的方式,包含第一种方式的两个功能

response.setContentType("text/html;charset=utf-8");

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。