解决JQUERY(前台)+Tomcat(服务器)+JAVA(后台)中文作为AJAX参数传递出现乱码的问题

时间:2024-03-28 20:24:03

前言:遇到这个AJAX参数传递中文出现乱码的问题,看了很多帖子都没有完全解决。最后是在JS里面做了重新编码才完全解决。特此从头到尾记录这次令人印象深刻的解决过程。

本文有部分内容借鉴于其它用户。

1.前台:

<1>HTML设置

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

解决JQUERY(前台)+Tomcat(服务器)+JAVA(后台)中文作为AJAX参数传递出现乱码的问题

<2>JSP设置

<%@page pageEncoding="UTF-8"%>

解决JQUERY(前台)+Tomcat(服务器)+JAVA(后台)中文作为AJAX参数传递出现乱码的问题

<3>JavaScript

JavaScript对于AJAX的参数进行编码后,通过Action传递到JAVA后台,JAVA代码不需要做专门解码

var bugtitle = encodeURIComponent(selectRow.bug_title);

解决JQUERY(前台)+Tomcat(服务器)+JAVA(后台)中文作为AJAX参数传递出现乱码的问题

这里如果不编码:通过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,需要手动设置:

解决JQUERY(前台)+Tomcat(服务器)+JAVA(后台)中文作为AJAX参数传递出现乱码的问题

重新启动后,没有效果还是乱码-Dfile.encoding=UTF-8

<2>修改启动脚本

修改Tomcat下的bin下的catalina.bat,在最前面添加 set JAVA_OPTS=-Dfile.encoding=UTF-8
解决JQUERY(前台)+Tomcat(服务器)+JAVA(后台)中文作为AJAX参数传递出现乱码的问题
重启之后,不会出现乱码了,但是用服务启动的话还是会乱码

<3>修改环境变量:

变量名:JAVA_TOOL_OPTIONS
变量值:-Dfile.encoding=UTF-8

 

3.JAVA后台

我采用的是Struts2的Action方式。

<1>struts.xml设置编码格式

<constant name="struts.i18n.encoding" value="utf-8" />

解决JQUERY(前台)+Tomcat(服务器)+JAVA(后台)中文作为AJAX参数传递出现乱码的问题

<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

https://blog.csdn.net/qq_30979185/article/details/72794359

https://www.cnblogs.com/tancp/p/3691756.html