javaweb的http数据传输中文乱码问题解决

背景

在前端与后台进行数据交互的过程,我们常遇到一种问题:中文乱码。追根到底这是因为中文的特殊性,在编码和解码过程中,可能用到的是两种编码方式,导致编码后再解码就乱码了(英语优势在哪,所以人家没有这方面的问题,我也一直在想,为啥不统一一下,解决这个乱码问题了。)

回到正题,有问题那我们就得解决问题啊。总不能有问题我就不干了不是。所以本篇文章闲扯了这么久,开始总结中文乱码问题解决方法。

总概

我将从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");
发布了43 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Hitmi_/article/details/96764275