博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
请求时参数到后台解码时会出现乱码问题
阅读量:6901 次
发布时间:2019-06-27

本文共 1026 字,大约阅读时间需要 3 分钟。

背景:在前台的表单输入框内输入中文再提交到服务器时,服务器就会对参数进行解码,这时,服务器会用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

你可能感兴趣的文章
python oop面向对象笔记
查看>>
python numpy模块使用笔记(更新)
查看>>
vue-cli构建项目 npm run build后应该怎么运行在本地查看效果
查看>>
unix平台下I/O聚集和分离的一种方案
查看>>
1081. Binary Lexicographic Sequence(找规律)
查看>>
Postman笔记 - 入门好文
查看>>
通过游戏来学习编程
查看>>
周记(飞船一号
查看>>
openssl初步使用
查看>>
Vue项目碰到"‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序或批处理文件"报错...
查看>>
模拟任务资源管理器的小程序
查看>>
通过一个例子,总结下检测数组属性的N种方法
查看>>
Samba结合AD实现域帐号认证的文件服务器
查看>>
laravel的Eloquent中的get()和Query/Builder中的get()
查看>>
bzoj 2286(洛谷 2495) [Sdoi2011]消耗战——虚树
查看>>
51nod 1301 集合异或和——异或dp
查看>>
weblogic.jdbc.wrapper.Blob_oracle_sql_BLOB cannot be cast to oracle.sql.BLOB 解决方法
查看>>
表格边框设置
查看>>
问题 K: A/B Problem
查看>>
Django实战(7):改造ProductList界面
查看>>