美文网首页
Servlet请求数据乱码解决

Servlet请求数据乱码解决

作者: 让你变好的过程从来都不会很舒服 | 来源:发表于2021-09-12 08:51 被阅读0次

servlet请求乱码问题

有时候在servlet中接收到的数据会出现乱码问题。

乱码的产生原因

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

乱码的解决方案

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

   //设置post请求的字符编码
    request.setCharacterEncoding("utf-8");

    //根据html中的name的名字获取用户在input中填写的值
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    //获取用户勾选的checkbox的值
    String[] hobby = request.getParameterValues("hobby");

    System.out.println(username);
    System.out.println(password);
    for(String s:hobby){
        System.out.println(s);
    }

针对get提交乱码的解决方式

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

 <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

需要注意的是在修改时要找到正确的server.xml文件。

万能解决方案

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

先以 ISO8859-1 的形式先对单字节的数据进行编码,并将编码后的数据存放在字节数组中。然
后,再将字节数组中的数据,按照指定的 UTF-8 格式进行解码,即变为了需要的 UTF-8 字符
编码的数据,解决了中文乱码问题。
通过上面的代码就可以解决get和post的乱码问题,但是代码量较大,开发中使用较少。

相关文章

网友评论

      本文标题:Servlet请求数据乱码解决

      本文链接:https://www.haomeiwen.com/subject/zbbphltx.html