请求时参数到后台解码时会出现乱码问题
背景:在前台的表单输入框内输入中文再提交到服务器时,服务器就会对参数进行解码,这时,服务器会用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来重新解析二进制。得到的结果就是 ”张飞“ 这个参数值。