`
tanglong8848
  • 浏览: 66966 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

JSP 中文传参问题

 
阅读更多
 在JSP接收URL传过来的参数时,总是拿到乱码,查看了网上很多的方法均无解。
  试过title=new String(request.getParameter("title").getBytes("ISO-8859-1"),"utf-8");
  本地测试title=new String(request.getParameter("title").getBytes("ISO-8859-1"),"gb2312");//本地正常//服务器乱码
  研究一下午最终发现竟然是拦截器把接收参数先做了一次编码转化,转化成了UTF-8。
   解决方案:
    在头部重新定一下接收参数的编码
    request.setCharacterEncoding("gb2312");
   问题解决
    需注意的是所有编码均需要统一
  
    <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
     

    由于中文字符在URL参数里面先被解析成了gb2312
    如:
   http://service.weibo.com/share/share.php?title=%E7%BA%B5%E8%A7%88%E6%B1%BD%E8%BD%A6%E8%A1%8C%E4%B8%9A%E6%9C%80%E6%96%B0%E8%B5%84%E8%AE%AF%EF%BC%8C%E9%A2%86%E7%95%A5%E5%A5%A5%E8%BF%AA%E7%A7%91%E6%8A%80%E9%AD%85%E5%8A%9B%E3
    如果不设置成gb2312接收,直接接收必然会被转成UTF-8
    所以设置
    request.setCharacterEncoding("gb2312");
   String title=request.getParameter("title")!=null?request.getParameter("title").trim():"";
   此时title内容拿到的中文正常
    还有一点需要注意的是:
    现在在IE6以上版本URL要求比较严格
    ? 不能出现多次,得用gb2312转码后的字符代替%3F
    其它特殊字符最后先都转一下码,不然有可能打不开网页。
  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics