请求时参数到后台解码时会出现乱码问题

背景:在前台的表单输入框内输入中文再提交到服务器时,服务器就会对参数进行解码,这时,服务器会用iso8859-1码表去解析传来的utf-8编码的参数。这样一来尴尬的乱码就会出现...

  其因为就是服务器查错了码表导致编码和解码时使用的码表不一致

如图:

    

解决方案:

 在POST中 可通过  request.setCharacterEncoding("utf-8"); 方式来解决。但这种方法只能对POST有效,对GET无效。

  -->原因是这种方法是将请求实体用UTF-8来解码,该方法必须注意把这行代码写在获取任何参数的代码之前,但是在GET中是没有请求实体的所以无效....

  所以我们只能是通过反向编码来手动将二进制用UTF-8来解码,则最后就达成用什么码表编码就用什么码表解码;方法如下:

    byte[] bytes = 需要解码的参数.getBytes("iso8859-1");
         需要解码的参数= new String(bytes, "utf-8");

1 String username = request.getParameter("username");
2         
3 //反向解码得出username对应的二机制序列
4 byte[] bytes = username.getBytes("iso8859-1");
5 username = new String(bytes, "utf-8");
6         
7 System.out.println("username: "+username);

解决乱码的思路图:

  

大概解释:”张飞“ 参数是以二进制传到服务器,服务器接到参数二进制时会根据iso8859-1码表来查询相应二进制的编码,因为在iso8859-1中没有中文所有在查询码表后出现的结果就是类似 "??????" 这样 。

      然后为了解决这个编码问题则我们手动将 "??????" 这个编码通过getBytes("iso8859-1")方法来重新得到与刚传入服务器时一直的二进制编码。

      这时得到正确的二进制后通过 new String("二进制",utf-8) 对象来手动用UTF-8来重新解析二进制。得到的结果就是 ”张飞“ 这个参数值。

  

原文地址:https://www.cnblogs.com/tongxuping/p/6891365.html