弄了我好多天的问题:页面传递参数中文乱码问题. 这是个很常见的问题.楼主搜索下就可以了^_^.http://blog.donews.com/qiyadeng/archive/2005/07/12/463736.aspx 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要是比较容易解决我也不用烦了几天.你看我发出的代码,基本上普通的解决方法已经用上了,就是不奏效.把gb2312换成gbk也是一样不行.哪位朋友还有其他建议吗? 用GBK试试-----------------试过了,还是不行~~!! request.setCharacterEncoding("gb2312"); 与new String(temp.getBytes("ISO8859-1"),"GB2312");用一个就可以了.不用两个联用. 试试以下方法:1) 打开tomcat的server.xml文件,找到区块,加入如下一行: URIEncoding="GBK" 完整的应如下: <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 2)重启tomcat。 试试以下方法:1) 打开tomcat的server.xml文件,找到区块,加入如下一行: URIEncoding="GBK" 完整的应如下: <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 2)重启tomcat。---------------------------------试了,还是不行~~!!我在想,会不会是浏览器的问题~~? java.net.URLEncoder.encode("中文","gbk") <c:out value="${param.errmsg}"/>直接输出传递过来的errmsg值了,所以你的errmsg = new String(temp.getBytes("ISO8859-1"),"GB2312")这句根本不起作用,好好看看JSTL吧。另外编码问题和你所用的服务器有关,比如同一个应用程序在resin下没问题,移植到tomcat下就可能出现问题,反之亦然。 <c:out value="${param.errmsg}"/>直接输出传递过来的errmsg值了,所以你的errmsg = new String(temp.getBytes("ISO8859-1"),"GB2312")这句根本不起作用,好好看看JSTL吧。另外编码问题和你所用的服务器有关,比如同一个应用程序在resin下没问题,移植到tomcat下就可能出现问题,反之亦然。------------------------------------------------------------------------------------<c:out value="${param.errmsg}"/>这句话不起作用一点错都没有,因为这是刚开始时我写的.但现在问题是连out.println(errmsg);这句"起作用"的也不行啊.我用的是tomcat的服务器. 关于解决jsp中文乱码: 1)首先更改tomcat的配置文件server.xml,在8080和8009两个服务器侦听端口的<Connector/>标签的末尾加上URIEncoding="GBK",这个也是URL路径编码,这是为了解决HTTP服务器中POST方法和GET方法中参数的中文乱码问题。 2)其次,服务器端也应对Request和Response方法进行相应的码型转换,这个在tomcat中实现十分简单,因为随着tomcat4的发行,有一个叫SetCharacterEncodingFilter的过滤器也出现了,只要将其添加到你的WEB应用程序的classes或者lib目录下即可,然后就是设置你的应用程序的配置文件web.xml了: <web-app>………… <filter> <filter-name>Set Character Encoding</filter-name> <filter-class>filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter> ………… <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> …………</web-app> 4)服务器端的问题解决了,最后需要解决的就是网页自身的问题了,jsp网页中需要加入如下一行: <%@ page contentType="text/html;charset=GBK"%> 5)呵呵,补充一点,这里尽管写得是GBK编码,不过个人还是强烈建议用UTF-8编码。 request.setCharacterEncoding("gb2312"); 与new String(temp.getBytes("ISO8859-1"),"GB2312");我觉的这个方法挺好的,我以前也是碰到你这种情况,就是用这种方法解决的。不知你试了没有 我用了,你看我代码里都有这两句了:request.setCharacterEncoding("gb2312"); 与new String(temp.getBytes("ISO8859-1"),"GB2312");还有,照着 yophoo(雅风)的方法做还是不行~~!哎~~!!我都快郁闷死了~~~~!!!!! 把<%@ page contentType="text/html;charset=gb2312" language="java" %>和request.setCharacterEncoding("gb2312");换成<%@ page language="java"contentType="text/html; charset=GB18030"pageEncoding="GB2312"%>试试。 是啊,郁闷死了啊~~!!对了,我的代码中的errmsg这个中文变量参数是用<jsp:forward>中传递过来的,不是post传递,不知道这个有没有关系? 我以前也遇到过像楼主的这种情况,不过我的在win平台上可以正常显示,换到solaris就不行了后来是取了整个页面的流,在分解!谁有好办法? 把<%@ page contentType="text/html;charset=gb2312" language="java" %>和request.setCharacterEncoding("gb2312");换成<%@ page language="java"contentType="text/html; charset=GB18030"pageEncoding="GB2312"%>试试。------------------------------------------------不行!!!是不是这个可能不是代码的问题,会不会是别的问题呢? window xp sp1 + Tomcat 既然是Tomcat服务器,你在论坛上搜一下中文显示,,会有很多配置filter的! 要不你在中间的Action类中加入这个试试response.setContentType("text/html; charset=GBK");然后其他全部改成“GBK”的。 是不是XP的问题??有时候有些东西在XP不能正常运行!建议还是不要用XP做系统平台开发,还是用2000吧! 不知楼主的问题解决了没,我给你两个方案,你试一下:1。去掉request.setCharacterEncoding("gb2312");2。new String(temp.getBytes("ISO8859-1"));呵呵,不要问我,为什么,内码转换问题本身就很复杂,如果给你解释的话会写一大堆的文字,建议你去网上找找这方面的文章看看。不又句话很受用:看你的代码应该是表单传递,并且使用gb2312,所以就在iso8859-1 和gb2312之间转换就好,两边都转一下,总会有成功的。不过我也同意楼上上****的意见,使用utf8 java.net.URLEncoder.encode("中文","gbk") 还没搞好啊,晕啊,n天了哦~~!!从表单读取的中文可以用new String(temp.getBytes("ISO8859-1"));搞定.但是,从 <jsp:forward page="error/addproductserror.jsp"> <jsp:param name="errmsg" value="商品为空或已经存在."/> </jsp:forward>传递过来的参数errmsg就解决不了了~~!! String errmsg = new String(temp.getBytes("ISO-8859-1"),"gb2312") public void getErrmsg(HttpServletRequest request) throws IOException { ServletInputStream in = request.getInputStream(); byte[] line = new byte[8192]; int i = 0; String newLine = ""; while ( (i = in.readLine(line, 0, line.length)) != -1) { newLine = new String(line, 0, i); System.out.println(newLine); if (newLine.indexOf("form-data; name=\"errmsg\"") != -1) { //根据自己页面信息来判断要取的字段值 System.out.println("找到所要取得的表单值"); } } }你运行以后,看后天打印的newLine结果。我想你就应该知道具体怎么写了。。虽然方法太苯了,但是可以解决你的问题。如果你实在解决不了的话,在用这个试试吧 首先我要说明的是:从表单传递过来的中文变量参数可以正常转换成"gb2312"格式,显示也正常~!但是,如果我用forward传递过来的中文参数不管用什么方法转化都显示成?号。<jsp:forward page="error/addproductserror.jsp"> <jsp:param name="errmsg" value="商品为空或已经存在."/> </jsp:forward>这个正是问题的关键~~!!请高手指点 <jsp:forward page="error/addproductserror.jsp?errmsg==商品为空或已经存在.">这样你试过了吗? wxhymy()说得好~!!用这个方法确实管用,问题解决了~!但我现在又有一个问题:为什么用<jsp:forward page="error/addproductserror.jsp?errmsg==商品为空或已经存在.">没有乱码.用<jsp:forward page="error/addproductserror.jsp"> <jsp:param name="errmsg" value="商品为空或已经存在."/> </jsp:forward>就出现乱码???? 实在不行,可以传值值钱,把汉字转成unicode码 String value = null; String src="商品为空或已经存在."/"; char [] bytes=new char[src.length()] src.getChars(0,src.length(),bytes,0); for(int i=0;i<bytes.length;i++){ value + = (int)bytes[i]+";"; }把value传过去,然后再返成汉字 请教一个问题,系统自动生成的一个流水码,由今年年份数字4位+从0001-9999每次递增1的4位数字组成的8位字符串。。。 在访问jsp页面的时候总是报缺少分号 ";" 问一个解决方案,头疼。。 hsqldb ifnull()函数的问题 Struts2.0 中关于validatorCheck的问题 请问怎么使用struts显示session中username的内容?感谢 在线求助! tomcat端口访问问题! 救救各位,特别急的事情,重大苦脑,高薪聘请技术员帮助解决下 office的ocx控件如何与jsp结合 100 分 帮解决 简单的JAVA 乱码问题 mysql数据库远程连接问题?
把gb2312换成gbk也是一样不行.
哪位朋友还有其他建议吗?
-----------------
试过了,还是不行~~!!
new String(temp.getBytes("ISO8859-1"),"GB2312");
用一个就可以了.不用两个联用.
1) 打开tomcat的server.xml文件,找到区块,加入如下一行:
URIEncoding="GBK"
完整的应如下:
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 2)重启tomcat。
1) 打开tomcat的server.xml文件,找到区块,加入如下一行:
URIEncoding="GBK"
完整的应如下:
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 2)重启tomcat。
---------------------------------
试了,还是不行~~!!
我在想,会不会是浏览器的问题~~?
另外编码问题和你所用的服务器有关,比如同一个应用程序在resin下没问题,移植到tomcat下就可能出现问题,反之亦然。
另外编码问题和你所用的服务器有关,比如同一个应用程序在resin下没问题,移植到tomcat下就可能出现问题,反之亦然。
------------------------------------------------------------------------------------
<c:out value="${param.errmsg}"/>
这句话不起作用一点错都没有,因为这是刚开始时我写的.
但现在问题是连out.println(errmsg);这句"起作用"的也不行啊.我用的是tomcat的服务器.
2)其次,服务器端也应对Request和Response方法进行相应的码型转换,这个在tomcat中实现十分简单,因为随着tomcat4的发行,有一个叫SetCharacterEncodingFilter的过滤器也出现了,只要将其添加到你的WEB应用程序的classes或者lib目录下即可,然后就是设置你的应用程序的配置文件web.xml了:
<web-app>
…………
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
…………
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
…………
</web-app>
4)服务器端的问题解决了,最后需要解决的就是网页自身的问题了,jsp网页中需要加入如下一行:
<%@ page contentType="text/html;charset=GBK"%> 5)呵呵,补充一点,这里尽管写得是GBK编码,不过个人还是强烈建议用UTF-8编码。
new String(temp.getBytes("ISO8859-1"),"GB2312");
我觉的这个方法挺好的,我以前也是碰到你这种情况,就是用这种方法解决的。
不知你试了没有
new String(temp.getBytes("ISO8859-1"),"GB2312");还有,照着 yophoo(雅风)的方法做还是不行~~!
哎~~!!我都快郁闷死了~~~~!!!!!
和request.setCharacterEncoding("gb2312");
换成
<%@ page
language="java"
contentType="text/html; charset=GB18030"
pageEncoding="GB2312"
%>
试试。
对了,我的代码中的errmsg这个中文变量参数是用<jsp:forward>中传递过来的,不是post传递,不知道这个有没有关系?
和request.setCharacterEncoding("gb2312");
换成
<%@ page
language="java"
contentType="text/html; charset=GB18030"
pageEncoding="GB2312"
%>
试试。
------------------------------------------------
不行!!!
是不是这个可能不是代码的问题,会不会是别的问题呢?
response.setContentType("text/html; charset=GBK");
然后其他全部改成“GBK”的。
有时候有些东西在XP不能正常运行!建议还是不要用XP做系统平台开发,
还是用2000吧!
我给你两个方案,你试一下:
1。去掉request.setCharacterEncoding("gb2312");
2。new String(temp.getBytes("ISO8859-1"));
呵呵,不要问我,为什么,内码转换问题本身就很复杂,如果给你解释的话会写一大堆的文字,建议你去网上找找这方面的文章看看。不又句话很受用:看你的代码应该是表单传递,并且使用gb2312,所以就在iso8859-1 和gb2312之间转换就好,两边都转一下,总会有成功的。不过我也同意楼上上****的意见,使用utf8
从表单读取的中文可以用new String(temp.getBytes("ISO8859-1"));搞定.但是,从 <jsp:forward page="error/addproductserror.jsp">
<jsp:param name="errmsg" value="商品为空或已经存在."/>
</jsp:forward>
传递过来的参数errmsg就解决不了了~~!!
ServletInputStream in = request.getInputStream();
byte[] line = new byte[8192];
int i = 0;
String newLine = "";
while ( (i = in.readLine(line, 0, line.length)) != -1) {
newLine = new String(line, 0, i);
System.out.println(newLine);
if (newLine.indexOf("form-data; name=\"errmsg\"") != -1) { //根据自己页面信息来判断要取的字段值
System.out.println("找到所要取得的表单值"); }
}
}你运行以后,看后天打印的newLine结果。我想你就应该知道具体怎么写了。。虽然方法太苯了,但是可以解决你的问题。如果你实在解决不了的话,在用这个试试吧
但是,如果我用forward传递过来的中文参数不管用什么方法转化都显示成?号。
<jsp:forward page="error/addproductserror.jsp">
<jsp:param name="errmsg" value="商品为空或已经存在."/>
</jsp:forward>
这个正是问题的关键~~!!请高手指点
但我现在又有一个问题:
为什么用<jsp:forward page="error/addproductserror.jsp?errmsg==商品为空或已经存在.">没有乱码.用<jsp:forward page="error/addproductserror.jsp">
<jsp:param name="errmsg" value="商品为空或已经存在."/>
</jsp:forward>
就出现乱码????
String value = null;
String src="商品为空或已经存在."/";
char [] bytes=new char[src.length()]
src.getChars(0,src.length(),bytes,0);
for(int i=0;i<bytes.length;i++){
value + = (int)bytes[i]+";";
}把value传过去,然后再返成汉字