解决Tomcat服务器中文编码

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():

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

Tomcat服务器响应编码

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

@Override
protected 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());

猜你喜欢

转载自blog.csdn.net/qq285016127/article/details/78158459