中文乱码处理
乱码的本质原因是因为在不同的系统或应用之间传递数据时,使用的编码方式不同,导致接收方无法正确解析数据。
1.服务器请求数据出现乱码
如果请求数据中包含中文字符,那么在服务器端需要使用正确的编码方式来解析请求数据,否则就会出现乱码。
POST方式提交表单数据
如果使用POST方式提交表单数据时,使用以下代码设置请求编码。
request.setCharacterEncoding("UTF-8");
注意:该方法必须在读取请求参数之前进行,否则设置无效。
GET方式提交表单数据
如果使用的是GET方式提交数据,那么设置请求编码方式的方法无效,需要在URL中添加字符集参数来指定编码方式。
http://example.com/?name=张三&age=18&charset=utf-8。
2.服务器响应数据出现乱码
如果响应数据中包含中文字符,那么在服务器端需要使用正确的编码方式来生成响应数据,否则就会出现乱码。在使用JSP或Servlet生成HTML响应时,可以使用以下代码来设置响应的内容类型和编码方式。
resp.setContentType("text/html;charset=utf-8");
注意:
- 方法必须在输出响应数据之前进行,否则设置无效。
- 如果响应数据不是HTML类型,那么需要将"text/html"替换成相应的内容类型,比如"application/json"等。同时,也需要将"utf-8"替换成相应的编码方式,比如"gbk"等。
以上两种情况便可以解决常见乱码问题,如果以上都设置了,仍无法解决乱码问题,还可以检查以下可能出现乱码的原因。
检查IDEA中的文件编码中的编码方式
设置→编辑器→文件编码,界面如下:
检查Tomcat中URIEncoding的编码格式。
在tomcat的安装目录/conf/server.xml文件中,设置元素的属性URIEncoding="UTF-8"即指定服务器对get按照UTF-8解码,要求
tomcat管理下的所有web应用要使用utf-8编码,具体代码如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
在数据库url地址添加字符配置
jdbc:mysql://localhost:3306/book?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8