解决Tomcat服务器中文编码

来源:互联网 发布:百度us优化怎么做 编辑:程序博客网 时间:2024/06/07 04:59

Tomcat服务器请求编码

Tomcat默认情况下,数据在服务端与浏览器传输过程中以ISO-8859-1编码的方式传输。如果传递的是中文则会出现乱码。为了解决获取请求中文参数的问题,我们可以先将数据以ISO-8859-1编码解码成二进制,再转换成UTF-8的形式,代码如下:

    //byte[] bytes = account.getBytes("ISO-8859-1");    //account = new String(bytes, "UTF-8");

上面的形式可以解决我们的问题,不过每次都要写这种代码,很浪费时间,以下介绍其他的解决方案

GET方式

可以在tomcat的conf/server.xml中,添加URIEncoding配置(不过一般情况下,我们不要求GET传递中文参数):

<Connector port="8081" protocol="HTTP/1.1"           connectionTimeout="20000"           URIEncoding="UTF-8"           redirectPort="8443" />

POST方式

对于POST请求,我们可以在获取参数之前添加代码setCharacterEncoding():

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)         throws ServletException, IOException {    req.setCharacterEncoding("UTF-8");    //记住设置编码的代码必须在获取参数内容代码之前    String account = req.getParameter("account");}

Tomcat服务器响应编码

上面谈到获取浏览器的请求码如果是中文会出现乱码,现在将中文发送给浏览器,同样也会出现乱码。代码如下:

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)         throws ServletException, IOException {    resp.getOutputStream().write("Hello world".getBytes());    resp.getOutputStream().write("深度学习".getBytes());}

解决方案1:

    resp.setCharacterEncoding("UTF-8");    resp.getOutputStream().write("Hello world<br />".getBytes());    resp.getOutputStream().write("深度学习".getBytes());

解决方案2:

    resp.setContentType("text/html;charset=utf-8");    resp.getOutputStream().write("Hello world<br />".getBytes());    resp.getOutputStream().write("深度学习".getBytes());
原创粉丝点击