JSP 中文传参问题
来源:互联网 发布:java单例模式和同步 编辑:程序博客网 时间:2024/05/20 13:09
在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 其它特殊字符最后先都转一下码,不然有可能打不开网页。