码迷,mamicode.com
首页 > 其他好文 > 详细

Servlet中的乱码问题及解决办法

时间:2019-11-09 13:49:53      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:中文乱码   eth   原因   sub   解码   解析   val   tran   控制   

假设现在有个form表单,当页面中提交一个包含中文的请求时,在服务端有可能出现中文乱码问题。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="registerServlet" method="POST">
		姓名:<input type="text" name="name"><br>
		年龄:<input type="text" name="age"><br>
		<input type="submit" value="注册">
	</form>
</body>
</html>

 乱码的产生原因

  Http协议中规定,数据的传输采用字节编码方式,即无论浏览器提交的数据所包含的中文是什么字符编码格式,一旦由浏览器经过Http 协议传输,则这些数据均将以 字节的形式上传给服务器。 因为 HTTP 协议的底层使用的是 TCP 传输协议。 TCP (Transmission Control Protocol) 传输控制协议 ,是一种面向连接的、可靠的、基于字节流的、端对端的通信协议。在请求中,这些字节均以 开头,并以十六进制形式出现。如 %5A%3D 等。

  当用户通过浏览器提交一个包含 UTF 8 编码格式的两个字的中文请求时,浏览器会将这两个中文字符变为六个字节(一般一个 UTF 8 汉字占用三个字节),即形成六个类似 %8E 的字节表 示形式,并将这六个字节上传至 Tomcat 服务器。Tomcat 服务器在接收到这六个字节后,并不知道它们原始采用的是什么字符编码。而Tomcat 默认的编码格式为 ISO 8859-1 。所以会将这六个字节按照 ISO 8859-1 的格式进行编码,这种编码方式不支持中文,这样就出现了乱码。

关于请求的乱码的解决方案

一、针对POST提交方式的解决方案

技术图片

 

 

 

<!--
设置了请求正文的字符编码,服务器解码的时候会按照UTF-8解码
但是这种方式对于GET方式的请求不适用,因为只对请求正文有作用,
GET方式的请求正文为空行,请求的参数出现在请求行
-->
request.setCharacterEncoding("UTF-8");

 二、针对GET提交方式的解决方案

  对于GET方式提交的情况,上述中设置request.setCharacterEncoding("UTF-8");是不会起作用的,因为GET方式的请求参数是在请求行

  目前了解的两种解决方案:

  ①Tomcat的版本影响,我自己试了一下Tomcat的7.*版本的,什么都不设置的话,会有乱码,但是用7.*以上的Tomcat服务器8.*,9.*的版本就不会出现乱码

  ②当我们以GET方式向服务器提交数据的话,在地址栏中,URL中URI部分的参数提交的中文会以字节的方式显示,对于请求路径中所携带参数的解析,由 Tomcat 服务器完成。而 Tomcat 服务器的字符编码默认为 ISO8859-1 ,所以会将请求路径中所携带的数据,按照 ISO8859 1 进行编码。

技术图片

 

  这种情况下我们可以通过修改 Tomcat 默认字符编码的方式来解决 GET 提交方式中携带中文的乱码问题。在 Tomcat 安装目录的 conf/server.xml 中,找到端口号为 8080 的 <Connector>标签,在其中添加 URIEncoding=UTF-8 的设置,即可将 Tomcat 默认字符编码修改为 UTF-8 。

技术图片

 

 

 

 

三、万能的解决方案(比较通用但是还是有弊端)

 

 

 

 

Servlet中的乱码问题及解决办法

标签:中文乱码   eth   原因   sub   解码   解析   val   tran   控制   

原文地址:https://www.cnblogs.com/lijie0609/p/11825000.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!