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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");

参考技术A 可能是过滤器中改变了编码方式,你在过滤器中测试一下就知道了!追问

我刚才进一步测试了下
因为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一下就能打印出中文了。
此时地址栏的中文是%。。。。。那种形式的

本回答被提问者采纳

解决jsp参数传递的中文乱码问题

解决jsp参数传递的中文乱码问题

制作人:全心全意

在jsp页面中,通过参数传递传递中文时,在显示参数值时中文内容变成了乱码。这是因为请求参数的文字编码方式与页面中的不一致造成的,所有的request请求都是ISO-8859-1的,而大多数页面采用的是UTF-8的编码方式。要解决此问题,只要将获取到的数据通过String的构造方法使用指定的编码类型重新构造一个String对象,即可正确地显示出中文信息。

例:

 

以上是关于jsp页面显示中文为问号的问题(乱码问题)的主要内容,如果未能解决你的问题,请参考以下文章

在jsp文件中的out.println(中文),在网页上中文显示的却是乱码和问号,怎样解决?

jmeter关于中文乱码显示为问号的问题

JIRA 详情页面链接Confluence显示为乱码解决方法

jsp与jsp页面之间传值中文,页面显示乱码问题

PHP插入MYSQL数据库中文变成乱码 问号

js的中文在网页中显示为乱码