目录
第三种:通过request.getParameter(name)获取表单提交
第四种:通过request.getParameter(name)获取URL地址中的中文参数
第五种:SpringMVC通过在web.xml文件配置过滤器来处理中文乱码
第一种:jsp页面中文乱码
概述
即在jsp文件中存在中文,但是运行后,在浏览器显式却是中文乱码。
错误代码
<html>
<body>
<h2>Hello World!</h2>
<h1>你好!</h1>
</body>
</html>
乱码展示
解决
在每个jsp文件顶部添加配置:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
正确展示
正确代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
<h1>你好!</h1>
</body>
</html>
第二种:html页面中文乱码
概述
即在html文件中存在中文,但是运行后,在浏览器显式却是中文乱码。
错误代码
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<h2>Hello World!</h2>
<h1>你好!</h1>
</body>
</html>
乱码展示
解决
在<head>标签中设置中文代码:
<meta charset="UTF-8">
正确展示
正确代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<h2>Hello World!</h2>
<h1>你好!</h1>
</body>
</html>
第三种:通过request.getParameter(name)获取表单提交
概述
在Servlet中通过req.getParameter("username")获取提交的参数是中文乱码。
错误代码
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class SubmitServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get...");
System.out.println(req.getParameter("username"));
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post...");
System.out.println(req.getParameter("username"));
}
}
乱码展示
- post请求乱码
- get请求乱码
解决
不过本项目可能是环境的原因,需要在tomcat上配置-Dfile.encoding=UTF-8
- post请求解决
在doPost方法中设置请求的编码格式
// 设置请求的编码格式
req.setCharacterEncoding("UTF-8");
- get请求解决
这里说的get请求是指method="get",而不是地址上直接写参数。
需要对内容进行转码处理。
// 对获取内容进行转码
String username = req.getParameter("username");
String s = new String(username.getBytes("ISO-8859-1"), "UTF-8");
正确展示
浏览器页面展示:
控制台打印:
正确代码
public class SubmitServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get...");
// 对获取内容进行转码
String username = req.getParameter("username");
String s = new String(username.getBytes("ISO-8859-1"), "UTF-8");
System.out.println(s);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post...");
// 设置请求的编码格式
req.setCharacterEncoding("UTF-8");
String username = req.getParameter("username");
System.out.println(username);
}
}
第四种:通过request.getParameter(name)获取URL地址中的中文参数
概述
在浏览器的地址栏中读取中文参数是乱码。
错误代码
public class SubmitServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 对获取内容进行转码
String username = req.getParameter("username");
System.out.println(username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
乱码展示
解决
对读取结果进行解码。
// 对获取内容进行转码
String username = req.getParameter("username");
String s = new String(username.getBytes("ISO-8859-1"), "GBK");
正确展示
在浏览器的地址栏直接输入参数。
控制台打印:
正确代码
public class SubmitServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 对获取内容进行转码
String username = req.getParameter("username");
String s = new String(username.getBytes("ISO-8859-1"), "GBK");
System.out.println(s);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
第五种:SpringMVC通过在web.xml文件配置过滤器来处理中文乱码
概述
在web.xml文件中配置过滤器来处理中文乱码。
解决
在web.xml文件中添加如下代码,<filter>标签必须在其他标签之前。
<!-- 避免中文乱码 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
就像下面这样:
然后就可以了。
注意上面的配置必须是表单提交,如下这种:
如果是在地址URL上进行,如下这种:
就需要把上面的<param-value>UTF-8</param-value>改为<param-value>GBK</param-value>。
其他
设置IDEA编码
设置JVM启动参数
设置参数为:-Dfile.encoding=UTF-8
设置tomcat编码
打开所使用tomcat所在目录下的server.xml文件:
原来的是:
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"
/>
替换为:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" useBodyEncodingForURI="true" disableUploadTimeout="true" URIEncoding="UTF-8" />
即如下图所示:
上面几种方法都试了的话,基本上就可以解决javaWeb中的乱码问题了。