彻底搞懂乱码--请求响应URLEncode和URLDecode

本文详细探讨了在不同浏览器下HTTP请求响应中URL编码(URLEncode)和URL解码(URLDecode)的问题,特别是中文乱码的处理。通过设置Tomcat服务器配置和页面编码格式,可以解决Chrome、Firefox的URL中文乱码。而对于IE浏览器,需要额外的JavaScript编码处理。此外,Tomcat8及以上版本对Chrome和Firefox的PathInfo及queryString的中文问题已有优化,但POST请求仍需设置字符编码,且Cookie中文乱码问题部分解决。
摘要由CSDN通过智能技术生成

不管是从浏览器 到tomcat服务器, 还是从tomcat服务器到浏览器,非ASCII数据传输都是需要编解码操作的
下面的都是针对tomcat8版本之前
我们先需要了解一点的是: 下面的是针对请求行

  • http://localhost:8080/example/中国?name=中国
  • 对于Chrome PathInfo是按照utf8编码, queryString是按照utf8编码
  • 对于Firefox PathInfo是按照utf8编码, queryString是按照utf8编码
  • 对于万恶的IE PathInfo是按照gbk编码, queryString是按照GBK编码
  • 注:上面不同版本浏览器编码字符集不同, 这里仅仅指出不同浏览器或者不同版本浏览器自己会用自己一套字符集编码 然后通过http往后台传递数据

在URL中传递中文的解决方式:

  1. 在服务端设置

在tomcat的配置文件中指定编码
server.xml文件中指定:URIEncoding=”UTF-8” 和 useBodyEncodingForURI=“true”

<Connector connectionTimeout="20000" port="8080" 
                protocol="HTTP/1.1" redirectPort="8443" 
                useBodyEncodingForURI="true" URIEncoding="UTF-8"/>

URIEncoding告诉服务器servlet编码URI时采用的编码;
useBodyEncodingForURI 告诉服务器解码URI时候需要采用浏览器的编码格式来解析(Chrome和Firefox针对URI编码是UTF-8,IE浏览器针对URI编码是GBK)

  1. 在浏览器页面设置

在页面设置文件的编码和保存格式UTF-8

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
  1. 这样设置后, chrome、firefox等浏览器URL中带有中文的请求, 不会出现400错误了,对独树一帜的IE大浏览器仍旧不起效果(后面我们解决IE的问题)
  2. 我们先来测试在chrome、firefox 中效果, 在此之前 我们需要了解一些servlet规范:

(1) HttpServletRequest.setCharacterEncoding()方法 不仅仅只适用于设置post提交的request body的编码还包括设置get方法提交的queryString的编码.比如: 从url中获取请求中文参数, 需要在 getParameter()之前,需要request.setCharacterEncoding.
(2) HttpServletRequest.getRequestURI()返回的字符串没有被Servlet服务器decoded过。需要自己手动decode

下面我们看代码: jsp页面

<a href="${pageContext.request.contextPath}/qingqiuhang?name=张三" >请求path中没有中文, 请求参数中有中文</a></br>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值