servlet GET/POST 乱码问题
来源:互联网 发布:人工智能之父图灵 编辑:程序博客网 时间:2024/05/28 23:20
获取表单中的信息:String value = req.getParameter("name");在表单提交过来时的中文乱码的问题:*浏览器怎样进行URL编码:(1)浏览器对FORM表单中输入的中文字符都会进行URL编码后再传送给WEB服务器。(2)对于页面中的FORM表单中输入的内容,浏览器将按照当前显示页面时所采用的字符集编码来进行URL编码。getParameter方法的中文问题:(1)getParameter等方法在读取的参数信息时,需要进行URL解码。(2)对于HTTP请求消息的请求行中的URL地址后的参数,getParameter等方法进行URL解码时所采用的字符集编码在Servlet规范中没有明确规定Tomcat中的ServletReq uest对象的getParameter等方法默认采用ISO8859-1字符集编码进行URL解码,因此无法返回正确的中文参数信息 。(3)对于POST方式下的“application/x-www-form-urlencoded”编码格式的实体内容,getParameter等方法以ServletRequest对象的getCharacterEncoding()方法返 回的字符集编码对其进行URL解码。(4)getCharacterEncoding()方法的返回值通常为null,对于这种情况,ServletRequest对象的getParameter等方法将使用默认的ISO8859-1字符集编码对实体内容中 的参数进行URL解码,因此也将无法返回正确的中文参数信息。(5)ServletRequest接口中定义了一个setCharacterEncoding方法来设置请求消息中的实体内容的字符集编码名称,getParameter方法将以该方法设置的字符集编码 对实体内容进行URL解码。(6)setCharacterEncoding方法设置的是请求消息中的实体内容的字符集编码名称,它只影响getParameter方法对POST方式下的“application/x-www-form-urlencod ed”编码格式的实体内容进行URL解码的结果,而不能影响getParameter方法对HTTP请求消息的请求行中的URL地址后的参数进行URL解码的结果。
解决方案:
1.post方式
对于POST方式,表单中的参数值对是通过request包发送给服务器,此时浏览器会根据网页的ContentType("text/html; charset=GBK")中指定的编码进行对表单中的数据进行编码,然后发给服务器。
在服务器中根据:request.setCharacterEncoding(""),只要编码跟浏览器一直的就可以。
2.get方式
对于GET方式,我们知道它的提交是将请求数据附加到URL后面作为参数,这样依赖乱码就会很容易出现,因为数据name和value很有可能就是传递的为非ASCII码。当URL拼接后,浏览器对其进行encode,然后发送到服务器。具体规则见URL编码规则。这里详细说一下encode的过程中容易出现的问题,在这个过程中我们要明白需要URL encode的字符一般都是非ASCII码字符,所以我们就能知道出现乱码主要是URL中附加了中文或特殊字符做成的,另一个要知道URL encode到底是以什么样的编码方式对字符进行编码的,其实这个编码方式是由浏览器决定的,不同的浏览器和同一浏览器的不同设置影响了URL的编码,所以为了避免我们不需要的编码,我们可以通过java代码或javaspcript代码统一进行控制。完成了URL encode之后URL就成了ASCII范围内的字符了,然后就以iso-8859-1的编码方式转换为二进制随着请求头一起发送出去。到了服务器之后,首先服务器会先用iso-8859-1进行解码,服务器获取的数据都是ASCII范围内的请求头字符,其中请求URL里面带有参数数据,如果是中卫或特殊字符,那么encode后的%XY(编码规则中的十六进制数)通过request.setCharacterEncoding()是不管用的。这时候我们就能发现出现乱码的根本原因就是客户端一般是通过用UTF-8或GBK等对数据进行encode的,到了服务器却用iso-8859-1方式decoder显然不行。
String value = new String(req.getParameter("name").getBytes("iso-8859-1"),"GBK");
0 0
- servlet GET/POST 乱码问题
- servlet post get乱码
- 全站编码 解决Get、Post乱码问题(Servlet)
- 解决Servlet中get或post中文乱码问题
- Java中Servlet的Get和Post乱码问题
- Java中Servlet的Get和Post乱码问题
- 解决servlet在post/get传递中文乱码的问题
- servlet中post和get请求乱码问题
- post/get乱码问题
- get,post乱码问题
- get post请求乱码问题
- post与get乱码问题
- post乱码、get乱码问题如何解决?
- servlet中解决get和post方法提取内容乱码问题
- 解决servlet中输出中文到浏览器以及post、get两种提交方法乱码问题
- Java中解决Servlet获取请求(GET/POST)数据时数据乱码问题
- 解决servlet中文乱码问题及get、post请求方式的讲解
- servlet中get和post编码问题
- Spring定义区分xml环境配置
- Layer Programming with Quartz Core
- [网络拾遗] 详解IP地址后面斜杠加具体数字
- String、StringBuffer与StringBuilder之间区别
- 使用GameKit实现iOS设备之间的蓝牙通信
- servlet GET/POST 乱码问题
- 编译Apache出现的问题:configure: error: APR not found .
- [转载]JS判断手机号是否正确(正则表达式)
- [概念]MRC的set和get
- 数据库中超键、候选键、主键的区分
- 搜索引擎下拉菜单 提示关键词 接口API (百度长尾词 淘宝长尾词)
- 第176天
- sublime text 在已经安装ConvertToUTF8插件后出现中文乱码
- 关于RAID1的读写问题