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