jspurl中中文参数的乱码解决

jspurl中中文参数的乱码解决

ID:37853486

大小:25.50 KB

页数:4页

时间:2019-06-01

jspurl中中文参数的乱码解决_第1页
jspurl中中文参数的乱码解决_第2页
jspurl中中文参数的乱码解决_第3页
jspurl中中文参数的乱码解决_第4页
资源描述:

《jspurl中中文参数的乱码解决》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、form有2中方法把数据提交给服务器,get和post,分别说下吧。 (一)get提交  1.首先说下客户端(浏览器)的form表单用get方法是如何将数据编码后提交给服务器端的吧。       对于get方法来说,都是把数据串联在请求的url后面作为参数,如:http://localhost:8080/servlet?msg=abc (很常见的一个乱码问题就要出现了,如果url中出现中文或其它特殊字符的话,如:http://localhost:8080/servlet?msg=杭州,服务器端容易得到乱码),url拼接完成后,浏览器会对url进行URL

2、encode,然后发送给服务器,URLencode的过程就是把部分url做为字符,按照某种编码方式(如:utf-8,gbk等)编码成二进制的字节码,然后每个字节用一个包含3个字符的字符串"%xy"表示,其中xy为该字节的两位十六进制表示形式。我这里说的可能不清楚,具体介绍可以看下java.net.URLEncoder类的介绍在这里。了解了URLencode的过程,我们能看到2个很重要的问题,第一:需要URLencode的字符一般都是非ASCII的字符(笼统的讲),再通俗的讲就是除了英文字母以外的文字(如:中文,日文等)都要进行URLencode,所以对

3、于我们来说,都是英文字母的url不会出现服务器得到乱码问题,出现乱码都是url里面带了中文或特殊字符造成的;第二:URLencode到底按照那种编码方式对字符编码?这里就是浏览器的事情了,而且不同的浏览器有不同的做法,中文版的浏览器一般会默认的使用GBK,通过设置浏览器也可以使用UTF-8,可能不同的用户就有不同的浏览器设置,也就造成不同的编码方式,所以很多网站的做法都是先把url里面的中文或特殊字符用javascript做URLencode,然后再拼接url提交数据,也就是替浏览器做了URLencode,好处就是网站可以统一get方法提交数据的编码方

4、式。完成了URLencode,那么现在的url就成了ASCII范围内的字符了,然后以iso-8859-1的编码方式转换成二进制随着请求头一起发送出去。这里想多说几句的是,对于get方法来说,没有请求实体,含有数据的url都在请求头里面,之所以用URLencode,我个人觉的原因是:对于请求头来说最终都是要用iso-8859-1编码方式编码成二进制的101010.....的纯数据在互联网上传送,如果直接将含有中文等特殊字符做iso-8859-1编码会丢失信息,所以先做URLencode是有必要的。   2。服务器端(tomcat)是如何将数据获取到进行解

5、码的。   第一步是先把数据用iso-8859-1进行解码,对于get方法来说,tomcat获取数据的是ASCII范围内的请求头字符,其中的请求url里面带有参数数据,如果参数中有中文等特殊字符,那么目前还是URLencode后的%XY状态,先停下,我们先说下开发人员一般获取数据的过程。通常大家都是request.getParameter("name")获取参数数据,我们在request对象或得的数据都是经过解码过的,而解码过程中程序里是无法指定,这里要说下,有很多新手说用request.setCharacterEncoding("字符集")可以指定解

6、码方式,其实是不可以的,看servlet的官方API说明有对此方法的解释:Overridesthenameofthecharacterencodingusedinthebodyofthisrequest.ThismethodmustbecalledpriortoreadingrequestparametersorreadinginputusinggetReader().可以看出对于get方法他是无能为力的。那么到底用什么编码方式解码数据的呢,这是tomcat的事情了,默认缺省用的是iso-8859-1,这样我们就能找到为什么get请求带中文参数为什么在

7、服务器端得到乱码了,原因是在客户端一般都是用UTF-8或GBK对数据URLencode,这里用iso-8859-1方式URLdecoder显然不行,在程序里我们可以直接 Java代码 newString(request.getParameter("name").getBytes("iso-8859-1"),"客户端指定的URLencode编码方式") newString(request.getParameter("name").getBytes("iso-8859-1"),"客户端指定的URLencode编码方式")还原回字节码,然后用正确的方式解码数

8、据,网上的文章通常是在tomcat里面做个配置本人的解决方法:在js中将参数进行编码

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。