前言:遇到这个AJAX参数传递中文出现乱码的问题,看了很多帖子都没有完全解决。最后是在JS里面做了重新编码才完全解决。特此从头到尾记录这次令人印象深刻的解决过程。
本文有部分内容借鉴于其它用户。
1.前台:
<1>HTML设置
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<2>JSP设置
<%@page pageEncoding="UTF-8"%>
<3>JavaScript
JavaScript对于AJAX的参数进行编码后,通过Action传递到JAVA后台,JAVA代码不需要做专门解码。
var bugtitle = encodeURIComponent(selectRow.bug_title);
这里如果不编码:通过HTTPWatch或者浏览器调试传递的内容是中文,但是到JAVA后台变成乱码。
如果采用编码:通过HTTPWatch或者浏览器变成一堆如下字符“%sad%啥的”,但是到JAVA后台变成中文。
<4>JS编码和解码:
name = window.encodeURI(window.encodeURI(name)); //编码
data = decodeURI(String); //解码
另外还有两种功能更强的方法:
encodeURIComponent(String)编码、decodeURIComponent(String)解码
详情请参考:https://blog.csdn.net/qq_30979185/article/details/72794359
2.服务器Tomcat
<1>我用的是Tomcat服务器,Tomcat服务器的默认传输编码不是UTF-8,需要手动设置:
重新启动后,没有效果还是乱码-Dfile.encoding=UTF-8
<2>修改启动脚本
修改Tomcat下的bin下的catalina.bat,在最前面添加 set JAVA_OPTS=-Dfile.encoding=UTF-8
重启之后,不会出现乱码了,但是用服务启动的话还是会乱码
<3>修改环境变量:
变量名:JAVA_TOOL_OPTIONS
变量值:-Dfile.encoding=UTF-8
3.JAVA后台
我采用的是Struts2的Action方式。
<1>struts.xml设置编码格式
<constant name="struts.i18n.encoding" value="utf-8" />
<2>代码写死编码格式。
HttpServletRequest request = ServletActionContext.getRequest();
request.setCharacterEncoding("UTF-8");
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("UTF-8");
<3>JAVA的编码和解码
我这里的JAVA后台没有对JS的编码做专门的解码处理,可能在Struts2里面处理了。
如果需要进行编码和解码,可以采用如下代码:
String str = "大哥哥ddfffff";
str = URLEncoder.encode(str, "UTF-8");//编码
str=URLDecoder.decode(str, "UTF-8");//解码
4.MYSQL数据库
请参考我的另外一篇文章:
https://blog.csdn.net/vessalasd1/article/details/88885286
5.参考:
https://blog.csdn.net/qq947297456/article/details/80526446