背景
在前端与后台进行数据交互的过程,我们常遇到一种问题:中文乱码。追根到底这是因为中文的特殊性,在编码和解码过程中,可能用到的是两种编码方式,导致编码后再解码就乱码了(英语优势在哪,所以人家没有这方面的问题,我也一直在想,为啥不统一一下,解决这个乱码问题了。)
回到正题,有问题那我们就得解决问题啊。总不能有问题我就不干了不是。所以本篇文章闲扯了这么久,开始总结中文乱码问题解决方法。
总概
我将从request和response(也就是后台收到的请求和发送给前端的响应两部分来总结)
我们对所有编码全部采用UTF-8编码方式(UTF-8包含全世界所有国家需要用到的字符)
request(请求)
这里我默认大家都有了一定的java后台的基础,知道前端发送数据给后台,并且知道一般分为get和post两种请求方式。
对于get请求:
我们需对请求的数据变成没有编码的byte流再对byte流进行UTF-8编码,实现如下:
String newData = new String(oldData.getBytes(“ISO-8859-1”), “UTF-8”);
注:tomcat默认的解析url(也就包含?后面的get数据)的编码方式为ISO-8859-1
这里就可以引出处理get请求乱码的第二种方式 ↵
——修改tomcat的service.xml文件
打开\tomcat7\conf文件夹下的service.xml文件。可以看到
修改为:
这样,就直接将url的编码方式变成了UTF-8。不用做其他处理也不会有乱码了。
对于post请求
我们在用 request.getParameter()获取数据前先使用以下代码
request.setCharacterEncoding(“UTF-8”);
这段代码的作用是设置请求体的文字的编码方式,一定要写在 获取数据之前
response(响应)
一行代码即可
response.setContentType(“text/html;charset=UTF-8”);
以上代码设置了响应的内容类型(text/html)和编码方式(charset=UTF-8)
##总结
下面我们将在总结的基础上再总结,讲下日常敲代码中怎么用。
首先,根据以上,我们可以知道,中文乱码必定是 request的get方法、request的post方法、response三种中的一种或多种造成的。也就是说,我们把他们三个都搞定。就没问题了。
第一步:解决 request的get方法
修改tomcat的service.xml文件:
第二步:解决request的post
在获取数据前加入以下代码
request.setCharacterEncoding(“UTF-8”);
第三步:解决response
在设置响应的数据前加入以下代码
response.setContentType(“text/html;charset=UTF-8”);
原文链接:https://blog.youkuaiyun.com/Hitmi_/article/details/96764275