浏览 1626 次
锁定老帖子 主题:请求参数中的中文读取问题
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-01
HTTP协议规定浏览器向web服务器传递的参数信息中不能出现某些特殊字符, 而必须对这些字符进行URL编码后再传递。Web服务器受到参数后,首先从中分离出每个 参数的名称和值部分,再进行URL解码,解码得到字节数组,然后按照某种字符集转换成 Unicode码 浏览器对form表单中输入的中文字符都会进行URL编码,再传送给web服务器。 浏览器会按照当前显示页面时所采用的字符集编码来进行URL编码。 5种情况: 1.对于HTTP请求消息的请求行中的URL地址后的参数(get方法提交表单),getParameter等方法进行 URL解码时所采用的字符集编码在Servelt规范中没有明确规定,它由各个Servlet引擎厂商 自行决定。对于这种情况,Tomcat中的ServletRequest对象的getParameter等方法默认 采用ISO8859-1进行解码 2.对于post方式下的"application/x-www-form-urlencoded"编码格式的实体内容, getParameter等方法以ServletRequest对象的getCharacterEncoding()方法返回的字符集对 其进行URL解码。如果getCharacterEncoding()方法返回null,则采用ISO8859-1 3.ServletRequest接口中定义了一个setCharacterEncoding方法来设置请求消息中 的实体内容的字符集编码名称,getParameter方法以该方法设置的字符集编码对实体内容 进行URL解码。setCharacterEncoding方法来设置的字符集只影响getParameter方法对POST 过来的内容进行URL解码的结果,而不能影响URL地址后的参数进行URL解码的结果 4.在Tomcat配置中,连接器(HTTP Connector)属性中有一个URIEncoding和 useBodyEncodingForURI属性,这两个属性设置对URL后的附加参数进行URL解码时该如何选择 字符集编码。URIEncoding用于制定URL后的附加参数的字符集编码,useBodyEncodingForURI 则说明是否采用实体内容的字符集编码设置来替代URIEncoding的设置,也就是说当 useBodyEncodingForURI属性设置为true时,ServletRequest.setCharacterEncoding方法设置 的字符集编码也影响getParameter等方法对URL地址后的参数进行URL解码的结果。(在/%TomCat_Home%/ conf\server.xml文件中找到 <Connector>标记,然后在后面加上useBodyEncodingForURI=true) 5.不同厂商的Servlet引擎内部进行URL解码的处理方式可能不一样,所以URL后面的 中文参数最好还是进行URL编码。可以采用java.net.URLEncoder.encode()方法进行编码,然后 浏览器中所显示出来的就是一堆百分号之类的字符 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |