JavaEE开发之URL中文编码问题

 

1. URLEncoder.encode方法会将所有“不符合”application/x-www-form-urlencoded格式的字符进行编码。如果你指望让它只对  http://localhost:8080/hello/中文/test.jsp?城市=北京 这样一个地址中的中文进行编码,然后拿去sendredirect的话,是不行的。

 

按照utf-8编码后的结果是:http%3A%2F%2Flocalhost%3A8080%2Fhello%2F%E4%B8%AD%E6%96%87%2Ftest.jsp%3F%E5%9F%8E%E5%B8%82%3D%E5%8C%97%E4%BA%AC

 

2.URI中中的编码情况:浏览器自己决定编码方式,服务器根据配置的编码格式来解码,程序中无法控制。程序可以控制的是http报文正文内容(即要么是POST过来的表单内容,要么是响应给浏览器的html文档等)的编码解码方式:HttpServletRequest.setCharacterEncoding方法设置请求中来的数据编码格式;HttpServletResponse.setCharacterEncoding方法设置发给浏览器的数据的编码格式,但是浏览器不一定会按照此设置来解析,浏览器很可能按照收到的文档中的格式说明来解析。

只要弄清楚这里的编解码层级架构,就不会出现乱码问题,包括URI中也是可以出现中文路径的。(注意,js中的编码比较特殊,详见大牛的分解:http://www.ruanyifeng.com/blog/2014/12/unicode.html

 

3.HttpServletResponse.setCharacterEncoding方法无法设置GBK/gb2312等编码,如果设置成这些编码,实际上还是使用的是默认编码。暂时还不知道原因。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值