当前页面: 开发资料首页 → 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当然是乱码了
谢谢大家的点评。给分,结贴!