做web开发,遇见乱码肯定是很正常的事
如每次都等到出现乱码了,再来解决乱码,倒不如在开始阶段做好以下准备,防止乱码的产生
项目编码,前端页面编码,数据库编码必须都是一致的;
其次请求路径尽量不要有中文;
请求的URL尽量不要有中文参数;
表单提交尽量采用POST请求方式
当然在开发过程中,不可能完全做到,这样也就没法避免造成乱码的问题,下面分情况总结下
一般情况下,现在假设都是UTF-8的编码方式;
1、表单通过POST提交方式
这是最简单的一种,例如在表单中填入了很多中文参数值,
从后台程序中通过req.getParameter("参数名")得到乱码
解决方案:在取参数前设置request的编码方式:
req.setCharacterEncoding("UTF-8");
String userName=req.getParameter("userName");
当然自己写个过滤器Filter的话,就省事的多。
2、通过URL的GET请求方式
请求路径中含中文:http://localhost:8080/encode/中文.jsp
或请求参数中包含中文参数:http://localhost:8080/encode/login.jsp?userName='张三'
解决方案1:
设置下tomcat的service.xml文件中添加tomcat解码方式URIEncoding参数:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
解决方案2:
(1)自己用js内置函数encodeURI对中文参数进行转码,再传到后台处理:
var userName="张三"; userName=encodeURI(encodeURI(userName)); var param="userName="+userName; var url="http://localhost:8080/encode/login.jsp?"+param;
(2)然在后台通过
String userName=req.getParameter("userName");
userName=java.net.URLDecoder.decode(userName, "utf-8");
方案2不能对含中文的路径进行处理。