JavaWeb中浏览器URL编码,GET乱码问题方式乱码解决

客户端提交数据到服务有两种方式GET和POST
1.get方式
 数据直接在url上进行拼接,使用&分隔key-value对.
 但有时key,value会出现中文等对于html标准来说不安全的字符
 html标准说
 除了字符”a”-”z”,”A”-”Z”,”0″-”9″,”.”,”-”,”*”,和”_” 其他的字符都是不安全的,需要进行编码.其中” “空格会被编码成+号
 当出现不安全字符时,在发送到服务器之前,浏览器会将这些参数值进行编码,一般推荐是使用utf-8编码格式.
 字符被转换为1个或者多个字节,然后每个字节都被表示成”%xy”格式的由3个字符组成的字符串,xy是字节的216进制的表示.
 也可以使用JavaScript对数据进行encodeURIComponent(url);
 现在的url就成了ASCII范围内的字符了,然后以iso-8859-1的编码方式转换成二进制随着请求头一起发送出去,对于get方法来说,没有请求实体,含有数据的url都在请求头里面
 请注意,其实这里进行了两次编码,第一次是使用UTF8,第二次使用iso-8859-1编码成能在网络上传输二进制101010….
 现在问题来到了服务器端,每种服务器默认的编码方式都可能不同,比如tomcat默认编码就是iso-8859-1, 而resin默认编码是utf-8
 按道理服务器端也会做两次的解码动作,第一次是对二进制内容的iso-8859-1的解码,第二次是使用服务器默认的编码对数据进行解码,
 因此我们使用request.getParameter(“name”)得到的数据是经过两次解码的.
 当tomcat使用iso-8859-1对数据进行第二次解码时,因为对应客户端编码是utf8,
 因此我们使用request.getParameter(“name”)就肯定乱码.
 如果我们不去改变tomcat的默认编码,可以使用
 new String(request.getParameter(“name”).getBytes(“iso-8859-1″), “utf-8″);手工重新解码.
 request.setCharacterEncoding(“utf-8″)这种方式对于get方式提交数据是无效的,
 但是对post方式提交数据却是有效的.因为get没有request body.

通常的做法还是修改tomcat的默认编码:
 在server.xml中的connector加上URIEncoding=”UTF-8″即可

而在server.xml中写的编码是设置的第二次的默认解码方式。

2.post方式
 post方式提交的数据也是必须进行编码的.
 如果form所在html文件指定了编码,就使用那个编码进行url编码.默认使用页面编码。

总结:为了防止出现乱码,一般系统相关的文件都设成utf8格式,web服务器,Java服务器,数据库的编码格式都设为utf8.这样一般比较少出现乱码问题.
 还有就是尽量使用post方式提交数据,一个是因为url的长度是有限制的,而get方式是将数据拼接到url上的.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值