问题描述
这是我传值界面<%@pagecontentType="text/html"import="java.util.*,beans.CginfoBean,java.net.*"pageEncoding="gbk"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>JSPPage</title></head><body><%Stringid=request.getParameter("id");%><h1>下载列表</h1><%CginfoBeanfindalluser=newCginfoBean();Stringusername=null;username=findalluser.finduserbyid(id);Listli=findalluser.GetFilename(username);Iteratorit=li.iterator();while(it.hasNext()){Stringfilename=null;filename=(String)it.next();%><ahref="download.jsp?id=<%=id%>&filename=<%=java.net.URLEncoder.encode(filename,"gb2312")%>"><%=filename%></a><%}%></body></html>
这个是我的接受界面<%@pagelanguage="java"import="beans.CginfoBean"contentType="text/html;charset=gb2312"pageEncoding="gb2312"%><%@pageimport="java.util.*,java.io.*"%><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>DOWNLOAD</title></head><body><%request.setCharacterEncoding("gbk");Stringfilename=newString(request.getParameter("filename").getBytes("gb2312"),"gbk");%>
现在只能接到英文或数字的如果传中文的话就不行请问怎么解决?
解决方案
解决方案二:
恕我直言,你这种写法真是很不好,你得确保你一个页面里面出现的编码是统一的,这样才可以正常。解决方法如下:1,你的传值页面的第一句话中的编码改成:pageEncoding="UTF-8"2,第二个页面的第一句话改成这样:<%@pagelanguage="java"import="beans.CginfoBean"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>3,第二个页面里面的<%%>里面的代码改成如下:request.setCharacterEncoding("UTF-8");Stringfilename=request.getParameter("filename");这样应该就可以解决问题了。原因如下:你第了个页面发过去的值是用UTF-8进行编码再传递,但是在接受页面接收时却认为它是用gbk编码进行编码的,当然不会有正常的结果了。就像你用钱买了一个MP3,却希望它能像微波炉一样发挥功能是一个道理。至于为什么传英文没问题,是因为上述两种编码编西方英文字符时编成的结果是一样的,也就是说有相同的二进制序列,所以什么编码都不影响英文。
解决方案三:
接收页面修改成以下这样<%@pagelanguage="java"import="beans.CginfoBean"contentType="text/html;charset=utf-8"pageEncoding="utf-8"%><%@pageimport="java.util.*,java.io.*"%><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>DOWNLOAD</title></head><body><%request.setCharacterEncoding("utf-8");Stringfilename=newString(request.getParameter("filename").getBytes("iso-8859-1"),"utf-8");%>
解决方案四:
学习了。