servlet请求乱码问题

乱码的产生原因

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

乱码的解决方案

针对 POST 提交乱码的解决方式
在接收请求参数之前先通过 request 的 setCharacterEncoding()方法,指定请求体的字符编码格式。这样的话,在接收到请求中的参数后,就可按照指定的字符编码进行解码。
注意,request 的 setCharacterEncoding()方法只能解决 POST 提交方式中的乱码问题,对
于 GET 提交方式的不起作用。因为该方法设置的是请求体中的字符编码, GET 提交中的参数不出现在请求体中,而出现在请求行。

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

万能解决方案(代码量较大,开发中使用较少)

//根据html中的name的名字获取用户在input中填写的值
String username = request.getParameter("username");
//将数据按照ISO8859-1编码后放到字节数组中
byte[] bytes = username.getBytes("ISO8859-1");
//将字节数组按照UTF-8解码为字符串
username = new String(bytes,"UTF-8");

猜你喜欢

转载自www.cnblogs.com/LY-HeroesRebor/p/10143468.html