关于java中 get提交方式的乱码问题。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于java中 get提交方式的乱码问题。相关的知识,希望对你有一定的参考价值。
我不明白的是为什么String str = new
String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") 这样就能解决乱码? 我自己试了一下 String test=new String ("中文".getBytes("iso8859-1"),"utf-8");
System.out.println("================"+test); 这样会出现乱码我知道。但是为什么使用第一个不会出现乱码而且正好就解决了get方法的乱码问题呢?
第一个发送的文字是utf-8编码 而tomcat接收后用错误的ISO-8859-1编码了,这样getBytes("ISO-8859-1")后会重新得到正确的utf-8编码的字节数组 ,然后用 new
String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8")重新将字节编码成UTF-8编码的文字这样文字就正确了。
如果是tomcat的话 server.xml文件里
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
后边的URIEncoding就是设置get方法编码的如果没有指定URL接收的编码类型,自动会用ISO-8859-1编码 参考技术A 通常浏览器是用iso-8859-1编码传输信息的。
而也要看你在页面那边是设置什么编码的,假如是utf-8。你编码是用utf-8,解码是用iso-8859-1,那么就像你自己写的那个一样,那肯定会乱码的。
第一个是将接收到的数据,用iso8859-1解码,再用utf-8编码,那就解决了乱码问题了 参考技术B 是的 这种重视出现一些问题啊 ,,
关于sevlet文件处理中的乱码问题以及处理方法
之前在做WEB大作业(论文共享系统)时,基本功能的实现相对较为顺利,但乱码问题却一直困扰着我,通过进行了一系列的尝试和查阅有关资料,总结出了以下情况以及相关处理方法,希望对遇到同样问题的你们有用。
一、表单提交时出现乱码:
在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式。每种方式都有着不同的解决方法,之所以出现乱码,原因就在于get请求时,其传递给服务器的数据是附加在URL地址之后的;而post的请求时,其传递给服务器的数据是作为请求体的一部分传递给服务器。这也就导致了对它们所产生的乱码的处理方式是不同的。
1、客户端的get请求
对于客户端的get请求来说,服务器端处理要想不出现乱码,需要用到String类型的构造函数,其中的一个构造函数就是用指定的编码方式去解码,一般都用“UTF-8”的方式。只要在服务器端将请求得到的参数重新构造成一个字符串就行了。如下所示:
String stuname = request.getParameter("stuname");
String str = new String(stuname.getBytes("ISO-8859-1"),"utf-8")
经过构造之后,客户端输入中文,且表单时get请求的情况下,str就变成了中文了。如果请求参数比较多,最好将它封装成一个工具类:
public class MyUtil
{
public static String getNewString(String str) throws UnsupportedEncodingException
{
return new String(str.getBytes("ISO-8859-1"),"UTF-8");
}
}
String stuname= MyUtil.getNewString(request.getParameter("stuname"));
2、客户端的post请求
对于客户端的post请求来说,处理乱码的问题就比较简单了,只要修改请求内的编码就行了。只要在服务器端的最开始处将请求的数据设置为“UTF-8”就行了,输入如下语句:
request. setCharacterEncoding(“UTF-8”);
二、超链接时出现乱码
在Web开发中,挺多的时候都是通过超链接去传递中文参数的,这也会导致在显示的时候也会出现乱码,对于超链接来说,它实际上是向服务器端发送了一个请求,而它发出的请求是属于get请求,所以对于超链接的乱码来说,它处理乱码的方式和表单的get请求出现乱码的方式是一样的。
String stuname= MyUtil.getNewString(request.getParameter("stuname"));
三、重定向时出现乱码
有时写上response的sendRedirect()方法进行重定向时也会出现乱码,重定向时实际上也是向服务器发送了一个请求,所以解决乱码的方法和和上面是一样的。
四、返回浏览器显示的乱码
在Servlet编程中,经常需要通过response对象将一些信息返回给浏览器,给我们的客户端,而我们在服务器端显示的中文,但是响应给客户端浏览器却是乱码,这主要是由于response对象的getWriter()方法返回的PrintWriter对象默认使用“ISO-8859-1”字符集编码进行Unicode字符串到字节数组的转换,由于ISO8859-1字符集中根本就没有包含中文字符,所以Java在进行转换的时候会将无效的字符编码输出给客户端,于是便出现了乱码,为此ServletResponse接口中便定义了setCharacterEncoding、setContentType等方法来指定getWriter方法返回的PrintWriter对象所使用的字符集编码,所以我们在写Servlet程序中,在调用getWriter方法之前设置这些方法的值。我们为了防止乱码,经常将以下两条语句一起写上:
response.setContentType(“text/html;charset=utf-8”);
response. setCharacterEncoding(“UTF-8”);
只要编写Servlet文件中含有响应给客户端的信息,那么就要写上这两句话。最好写上第二句话,因为它的优先级高,它的设置结果将覆盖setContentType等方法设置的字符编码集。
五、修改Tomcat的编码
在上述的get请求所导致乱码问题中,还有一种解决的方案,我们常用Tomcat作为运行Servlet和JSP的容器,而Tomcat内部默认的编码是ISO-8859-1,所以对于get请求方式,其传递的数据(URI)会附加在访问的资源后面,其编码是Tomcat默认的,如果修改该URI的编码,那么对于所有的get请求方式便不会出现乱码了包括上边说的重定向和超链接,在Tomcat的配置文件server.xml中找到修改Tomcat的端口的地方,在其内部加入URIEncoding属性,设置为和你的项目中所设的编码一样的值,这里全部都是UTF-8。如下所示:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" URIEncoding="UTF-8" />
以上是关于关于java中 get提交方式的乱码问题。的主要内容,如果未能解决你的问题,请参考以下文章
java jsp 中 表单用 get 提交 怎样解决中文乱码问题?