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;
我的意思是说,手动在地址栏输入参数,并且赋一个中文的值。
然后页面获取后能正常显示中文
我试了的,确实可以。
你别怀疑我啊,帮我找找错误
你在服务器端是如何读取你所传递的中文参数的。我想先了解一下情况以作判断。
追问服务器端: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");
我刚才进一步测试了下
因为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(中文),在网页上中文显示的却是乱码和问号,怎样解决?