乱码的种种情况"/>
JavaWeb中文乱码的种种情况
目录
第一种:jsp页面中文乱码
概述
错误代码
乱码展示
解决
正确展示
正确代码
第二种:html页面中文乱码
概述
错误代码
乱码展示
解决
正确展示
正确代码
第三种:通过request.getParameter(name)获取表单提交
概述
错误代码
乱码展示
解决
正确展示
正确代码
第四种:通过request.getParameter(name)获取URL地址中的中文参数
概述
错误代码
乱码展示
解决
正确展示
正确代码
第五种:SpringMVC通过在web.xml文件配置过滤器来处理中文乱码
概述
解决
其他
设置IDEA编码
设置JVM启动参数
设置tomcat编码
第一种: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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("get...");System.out.println(req.getParameter("username"));}@Overrideprotected 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 {@Overrideprotected 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);}@Overrideprotected 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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 对获取内容进行转码String username = req.getParameter("username");System.out.println(username);}@Overrideprotected 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 {@Overrideprotected 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);}@Overrideprotected 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 receivedand responses are returned. Documentation at :Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)Java AJP Connector: /docs/config/ajp.htmlAPR (HTTP/AJP) Connector: /docs/apr.htmlDefine 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中的乱码问题了。
本篇文章代码地址
更多推荐
JavaWeb中文乱码的种种情况
发布评论