jsp页面显示中文为问号的问题(乱码问题)

1、jsp页面里面本身就有的中文字能正常显示
2、通过url访问该jsp,传中文的参数,获取后也能正常显示

通过过滤器的dispatcher.forward跳转来的的url中文的参数就显示为问号了,这怎么解决?
RequestDispatcher dispatcher=request.getRequestDispatcher("/error.jsp?errorMsg="+java.net.URLEncoder.encode(ss,"GBK"));
dispatcher.forward(request, response);

以上是我改过很久后仍不成功的一段失败代码,请问怎么解决?

我把相关的几句代码都贴出来,可以看一看
if(comeIP.equals(comeIP2)){JOptionPane.showMessageDialog(null, "你的IP是127.0.0.1,所以禁止访问");dispatcher.forward(request, response);return;}
if(comeIP.indexOf(comeIP1)>=0){dispatcher.forward(request, response);return;}

“通过url访问该jsp,传中文的参数,获取后也能正常显示”:我觉得你这句话应该也不成立。追问

我的意思是说,手动在地址栏输入参数,并且赋一个中文的值。
然后页面获取后能正常显示中文

我试了的,确实可以。
你别怀疑我啊,帮我找找错误

追答

你在服务器端是如何读取你所传递的中文参数的。我想先了解一下情况以作判断。

追问

服务器端:HttpServletResponse response1=(HttpServletResponse)response;
String ss="啊啊啊啊啊啊啊啊啊啊";然后
if(comeIP.equals(comeIP2)){
response1.sendRedirect("http://192.168.101.11:8080/xxx/error.jsp?errorMsg="+ss);
return;}

加上也不行:
byte[] bytes = ss.getBytes("iso-8859-1");
ss = new String(bytes, "GBK");
这句话加过也不行:response1.setContentType("text/html;charset=GBK");

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-13
可能是过滤器中改变了编码方式,你在过滤器中测试一下就知道了!追问

我刚才进一步测试了下
因为dispatcher.forward是隐式跳转的,就是看不到url地址的,url地址栏那儿仍显示调用触发器的那个jsp,所以我换成了response.senRedirect,结果我发现地址栏那的参数也是问号

说明jsp页面多半没问题,问题在过滤器中。传值都传成问号了

可是,过滤器里我确实用的GBK啊,并且各种方法都试过一遍了的。

追答

嗯,那你测试一下过滤器呗

追问

我测了啊,你看我追问楼上那位的说明,你看看

追答

我不明白你传递参数的整个流程是怎样的,java.net.URLEncoder.encode(ss,"GBK")的参数最好用URLDecoder.decode(ss,"GBK")获取,或者直接获取也行,传输过程中如果用了其它编码方式。用“iso-8859-1”解码也是乱码的。最好把流程详细列出来,这样也方便我们帮你找原因。

追问

谢。过滤器里是:(多了百度不让贴)
HttpServletResponse response1=(HttpServletResponse)response;
String ss="啊";
byte[] bytes = ss.getBytes("iso-8859-1");
ss = new String(bytes, "GBK");
comeIP=request.getRemoteAddr();
if(comeIP.equals(comeIP2)){
response1.sendRedirect("http://localhost:8080/xxx/error.jsp?errorMsg="+ss);
return;}
chain.doFilter(request, response);

追答

这里能否打印出中文?

追问

过滤器里面就没试过了。我已经找到原因了。其实很明显的。
呵呵,看来你在处理中文乱马上也不是很有经验,不然应该很容易看出来。
我直接编码成gbk传值是不行的,应该先URLEncoder.encode一下然后可以穿传了,不需要什么GBK的。

最后再到jsp页面URLDecoder.decode出来,这时GBK一下就能打印出中文了。
此时地址栏的中文是%。。。。。那种形式的

本回答被提问者采纳
相似回答