站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题servlet中用getParameter(String)参数返回乱码的问题

servlet中用getParameter(String)参数返回乱码的问题

摘要: servlet中用getParameter(String)参数返回乱码的问题


在浏览器一端,encoding设为UTF-8编码,发送的时候有一个参数name是中文姓名,用GET方法发送,可以看到浏览器的确已经把这个中文转成了UTF-8形式的%**。在服务器这端,我用servlet的getQueryString()返回的也是UTF-8形式的编码,看起来也是对的。但是当我用getParameter("name")的时候,返回的中文就是乱码了。

请问这是为什么呢?

谢谢!


老问题,转换一下


http://www.blogjava.net/qiyadeng/articles/14141.html


转化一下
String name = new String(request.getParameter("name").getBytes("8859_1"), "GB2312");


如果encoding设为UTF-8编码,最好保持一致!
String name=new String(request.getParameter("name").getBytes("UTF-8"));


谁能告诉我为什么呢?用request.getParameter("name")返回的String是什么编码的呢?我整个过程都统一使用了UTF-8编码,为什么还有这种问题呢?

当然还是先谢谢大家!


IE传的是ISO-8859 还有你用POST方式传一下看看


在tomcat的conf/server.xml 中找到

enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="utf-8"/>

加入 URIEncoding="utf-8",如上.重启tomcat.
这里是解决GET方式获取UTF-8的问题。如果在post方式下没有问题,而在get下有问题,一般可以这样解决。


另外,请问楼主request.getParameter("name")和etQueryString()是否中文是在哪里看的?在debug下从变量中看的?还是页面中看的?或是数据库中看的?
这个是否乱码与你看的环境有关系,如果你是用的eclipse,必须要设置console窗口也为utf-8输出才能正确看到中文.


form传送参数方式有2种
1.get方式的解决方法是:

最后那加入URIEncoding='GBK' 就可以了。
2.加入过滤器能够解决的问题,针对post提交有效

在%Tomcat 5.0/webapps/servlets-examples/WEB-INF/classes/filters下找到
SetCharacterEncodingFilter.java ,之后在你的工程中建一个名filters的包,包里就放SetCharacterEncodingFilter.java,之后在Web.XML中,加入


Set Character Encoding
com.cecp.filter.SetCharacterEncodingFilter

encoding
GBK


ignore
true




Set Character Encoding
/*




转化一下
String name = new String(request.getParameter("name").getBytes("8859_1"), "GB2312");



转换的问题,用下面这段代码应该可以解决你的问题:

String content=request.getParameter("name").toString();
byte temp[] =str1.getBytes("ISO-8859-1");
content=new String(temp);
out.println("name="+content);


request.setCharacterEncoding("gb2312");

最简单的办法是加上上面这句...


当然你的JSP页面也要加上上面这句...


在JSP页面中设置编码方式为GBK
然后在SERVLET中request.setCharEncoding("GBK")就可以了,用不着用STRING中的字符编码方式转换了


我很少用JAVA写JSP,所以问这么弱智的问题。不好意思。

我把我的问题再重复一遍,这次详细一点:

我在eclipse上建立了一个web project。我是用linux开发,所有的编码默认都是UTF-8,包括IDE的输出console。

在调试的时候,我把浏览器(FIREFOX)的encoding设为UTF-8,并且发送一个请求。其中URL的某个参数name是中文姓名,用GET方法发送。可以看到浏览器的_地址栏_的确已经把这个中文转成了UTF-8形式的%**(因为是三字节编码,肯定不是GBK)。在服务器这端,我用servlet的getQueryString()返回的也是UTF-8形式的编码(看起来是%**%**%**),和浏览器的地址栏一样的。看起来也是对的。但是当我用request.getParameter("name")的时候,返回的中文就是乱码了。

所以我觉得原因应该在于tomcat在解析这个url的时候,不是用UTF8来decode,所以就导致了出现乱码。我只是很奇怪的是,为什么我整个OS都是UTF8的,而且tomcat也是默认配置,为什么就会用别的编码呢?难道tomcat默认是采用ISO****编码吗?

谢谢大家了。我这段时间在自学hibernate。呵呵,估计还有问题问大家。



http://blog.csdn.net/lip009


里边有篇关于乱码简单的总结


直接用utf-8当然是乱码了


谢谢大家的点评。给分,结贴!


↑返回目录
前一篇: 如何过虑HTML标记
后一篇: 求:谁有代验证码的登陆?