jsp之间传输中文乱码问题的解决办法

首先得知道关于设置编码各个属性的含义:

1、pageEncoding=”UTF-8”的作用是设置JSP编译成Servlet时使用的编码。
2、contentType=”text/html;charset=UTF-8”的作用是指定对服务器响应进行重新编码的编码。
3、request.setCharacterEncoding(“UTF-8”)的作用是设置对客户端请求进行重新编码的编码。
4、response.setCharacterEncoding(“UTF-8”)的作用是指定对服务器响应进行重新编码的编码。
response.setCharacterEncoding(“UTF-8”)的作用是指定对服务器响应进行重新编码的编码。同时,浏览器也是根据这个参数来对其接收到的数据进行重新编码(或者称为解码)。所以在无论你在JSP中设置response.setCharacterEncoding (“UTF-8”)或者response.setCharacterEncoding(“GBK”),浏览器均能正确显示中文(前提是你发送到浏览器的数据编码是正确的,比如正确设置了pageEncoding参数等)。

对于发送数据,服务器按照response.setCharacterEncoding—contentType—pageEncoding的优先顺序,对要发送的数据进行编码。

对于get方式提交的数据:
提交页面在传输数据时,数据直接在url上进行拼接,使用&分隔key-value对,但有时key,value会出现中文等对于html标准来说不安全的字符,所以首先会用utf-8编码,把每个字节变成%xy的形式,然后数据传输到服务器时,会根据服务器设置的URIEncoding属性再编码一次,如果没有设置则默认以iso-8859-1来进行编码
所以这样到达服务器时,传输的数据经过了两次编码,当从接收页面再获取这数据时,也应该经过两次解码,才能正确的获取参数,
第一次是对二进制内容的iso-8859-1的解码,第二次是使用服务器设置的编码对数据进行解码
比如有以下几种情况:
(1)、服务器没有设置URIEncoding属性,那么数据到达服务器时,就经过了UTF-8编码和iso-8859-1编码,所以接收页面也得经过两次解码:
new String(request.getParameter(“paramName”).getBytes(“ISO-8859-1”),”UTF-8”);
(2)、服务器设置URIEncoding=”GBK”,那么数据到达服务器时,就经过了UTF-8编码和GBK编码,所以接收页面也得经过两次解码:
new String(request.getParameter(“paramName”).getBytes(“GBK”),”UTF-8”);
(3)、服务器设置URIEncoding=”UTF-8”,那么数据到达服务器时,实际上数据已经解码了,这时候直接过去即可:
request.getParameter(“paramName”);
当然也可以这样写:new String(request.getParameter(“paramName”).getBytes(“UTF-8”),”UTF-8”);

对于post方式提交的数据:
对于表单中POST方式提交的数据,只要在接收数据的JSP中正确request.setCharacterEncoding参数,即将对客户端请求进行重新编码的编码设置成浏览器编码,就可以保证得到的参数编码正确。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐观男孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值