日期:2014-05-16  浏览次数:20344 次

jsp使用过滤器后,产生JavaScript中文乱码
过滤器里是这么写的:
PrintWriter out = response.getWriter();
HttpSession session = ((HttpServletRequest)request).getSession();

if ( (String)session.getAttribute("cellphoneName")==null ){
out.print(" <script language='javascript' charset='gb2312'>window.alert('您尚未选择手机');history.go(-1); </script>");
}

chain.doFilter(request, response);
==============================================
web.xml里面是这么也得
<filter>
  <filter-name>cellphoneNameExist</filter-name>
  <filter-class>filter.CellphoneNameExist</filter-class>
</filter>
<filter-mapping>
  <filter-name>cellphoneNameExist</filter-name>
  <url-pattern>/cellphoneBuy.jsp</url-pattern>
</filter-mapping>
===============================================
页面访问经过过滤器后,弹出警告时:你尚未选择手机 是乱码。

页面上我也用了
request.setCharacterEncoding("gb2312");
response.setCharacterEncoding("gb2312");

小弟课程项目要交了,实在不知道怎么解决。。。
求哪位高人帮忙。。小弟感激不尽。。。

------解决方案--------------------
将window.alert('您尚未选择手机')
换成unicode编码
window.alert('\u60a8\u5c1a\u672a\u9009\u62e9\u624b\u673a')


------解决方案--------------------
你加上这个response.setContentType("text/json; charset=gb2312)"); 试试!

------解决方案--------------------
你有没有转码的过滤器 在运行
------解决方案--------------------
去掉JS里的charset='gb2312'
------解决方案--------------------
浏览器自动选择编码
在别的机子上test下
------解决方案--------------------
可能是你的项目与发布项目的容器之间字符集不同引起的,如果是在Tomcat中可以在Apache Tomcat 6.0.18\conf下的server.xml中该成下面的代码试试
<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
redirectPort="8443" URIEncoding="GBK"/>
------解决方案--------------------
Java code

out.println("<script type='text/javascript'>");
out.print("alert(decodeURIComponent(\"" + java.net.URLEncoder.encode("您尚未选择手机", "UTF-8").replace("+","%20") + "\"));");
out.println("history.go(-1);");
out.println("</script>");