中文乱码问题解决和原理
- 2019 年 10 月 30 日
- 筆記
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/luo4105/article/details/53915233
产生乱码的原因主要是两端编码/解码不一致问题 1.前台页面的编码格式和后台代码的编码格式不一致,现在一般统一使用utf-8这种编码格式 就需要将前台jsp编码指定为utf-8
<%@page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8" %>
后台的接收的编码格式为项目的编码格式,可以在开发工具中将编码格式改为utf-8
2.form表单提交方式为get,或url传参汉字乱码
原因: 在get提交时,参数和数据会以name/value由&分开,url的编码是ASCII码前面加上% 汉字及一些特殊符号无法转成ASCII码,它们会被浏览器转化成iso-8859-1的编码格式 这时有以下解决方式 a.用代码在后台接收时转码一下,将iso-8859-1码的数据转成需要的编码格式(如utf-8)
String param = request.getParameter("zhongwen"); param = new String(param.getBytes("iso8859-1"),"utf-8");
b.将服务器的接收格式修改一下,比如将tomcat的接收格式改为iso8859-1 在server.xml文件中,修改以下代码
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
c.将form表单提交方式变为post方式,即添加method="post"
post提交不乱码的原理
对于POST方式,表单中的参数值对是通过request包发送给服务器,此时浏览器会根据网页的ContentType("text/html; charset=UTF-8")中指定的编码进行对表单中的数据进行编码,然后发给服务器。 由于往往前台编码和后台编码设置一致,所以我们可以在服务器端的程序中我们可以通过request.getParameter(java)获得正确的数据。 参考资料 [1].http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html [2].http://blog.csdn.net/lfsf802/article/details/7232834