解决中⽂乱码的⼏种解决⽅法(推荐)
⾸先说明我的特殊情况:
1. 前台jsp中,我使⽤的是 form post 请求,设置了 enctype="multipart/form-data" ,页⾯编码格式都是utf-8
2. 后台中,我使⽤的是commons-fileUpload组件,ServletFileUpload 解析form表单和⽂件,
中文字符unicode查询
3. 设置 request.setCharacterEncoding("UTF-8");
4. 设置了ServletFileUpload .setHeaderEncoding("UTF-8");
5.Tomcat 的配置下⾯ l  也已经设置了 URIEncoding="UTF-8";
⾄此,按道理所有的格式都匹配上了,前后对应,解析出来的肯定是utf-8,但是经过formfield解析出来后任然是ISO-8859-1格式的编码,
enctype="multipart/form-data" 会将数据以2进制的编码格式传递,因此我断定是 ServletFileUpload  解析时出了问题,多番查,
我的问题缺少了⼀步String formFieldValue = String("UTF-8");
JSP和Servlet的六种中⽂乱码处理⽅法
⼀、表单提交时出现乱码:
在进⾏表单提交的时候,经常提交⼀些中⽂,⾃然就避免不了出现中⽂乱码的情况,对于表单来说有两种提交⽅式:get和post提交⽅式。所以请求的时候便有get请求和post请求。每种⽅式都有着不同的解决⽅法,之所以出现乱码,原因就在于get 请求时,其传递给服务器的数据是附加在URL地址之后的;⽽post的请求时,其传递给服务器的数据是作为请求体的⼀部分传递给服务器。这也就导致了对它们所产⽣的乱码的处理⽅式是不同的。
1、客户端的get请求
get提交时,容器以容器的编码来编码如果⽤的tomcat 默认的编码是iso-8859-1 在l⾥⾯设置编码或者
下⾯代码如
String name = ("name");
String strName = new Byte("iso-8859-1"),"GBK");
对于不同的请求⽅式,解决乱码的问题也是不⼀样的,对于客户端的get请求来说,服务器端处理要想不出现乱码,解决这个问题稍微复杂⼀些,需要⽤到String类型的构造函数,其中的⼀个构造函数就是⽤指定的编码⽅式去解码,⼀般都⽤“UTF-8”的⽅式。只要在服务器端将请求得到的参数重新构造成⼀个字符串就⾏了。
经过构造之后,客户端输⼊中⽂,且表单时get请求的情况下,str就变成了中⽂了。
2、客户端的post请求
对于客户端的post请求来说,处理乱码的问题就⽐较简单了,因为请求的数据时作为请求体的⼀部分传递给服务器的,所以只要修改请求内的编码就⾏了。只要在服务器端的最开始处将请求的数据设置为“UTF-8”就⾏了,输⼊如下语句:request. setCharacterEncoding(“UTF-8”);这样⽤户在服务器端获取到的中⽂数据就不再是乱码了。
⼆、超链接时出现乱码(低版本浏览器不⾏IE6)
在Web开发中,挺多的时候都是通过超链接去传递中⽂参数的,这也会导致在显⽰的时候也会出现乱码,对于超链接来说,它实际上是向服务器端发送了⼀个请求,⽽它发出的请求是属于get请求,所以
对于超链接的乱码来说,它处理乱码的⽅式和表单的get请求出现乱码的⽅式是⼀样的。
三、重定向时出现乱码(低版本浏览器不⾏IE6)
有时写上response的sendRedirect⽅法进⾏重定向时也会出现乱码,重定向时实际上也是向服务器发送了⼀个请求,所以解决乱码的⽅法和和上⾯是⼀样的。
四、浏览器版本低导致的乱码
上⽹的时候,有时提交的⼀些信息在地址栏显⽰的是“%2C%C6%CC%C6”的字样,其实这都是防⽌出现乱码进⾏的解决⽅案,如果你的浏览器是IE6或以下版本,则我们的第⼆种情况和第三种情况会出现乱码(尤其是当中⽂是奇数的时候),这就不
好使了所以我们必须采⽤另⼀种⽐较实际的作法:
在java包中提供了URLEncoder类和URLDcoder类,这两个类⼜分别提供了encode和decode两个静态⽅法,分别⽤于进⾏编码和解码。我们将要传递的中⽂参数进⾏编码之后,在传递给服务器,服务器解码之后,就可以显⽰中⽂了。
进⾏编码:de(stuname,”UTF-8”)
传递给服务器:<a href=”/1.jsp?stuname<%=stuname%>”>传递</a>
进⾏解码:URLDecoder.decode(stuname,”UTF-8”)
五、返回浏览器显⽰的乱码
在Servlet编程中,经常需要通过response对象将⼀些信息返回给浏览器,给我们的客户端,⽽我们在服务器端显⽰的中⽂,但是响应给客户端浏览器却是乱码,这主要是由于response对象的getWriter()⽅法返回的PrintWriter对象默认使⽤“ISO-8859-1”字符集编码进⾏Unicode字符串到字节数组的转换,由于ISO8859-1字符集中根本就没有包含中⽂字符,所以Java在进⾏转换的时候会将⽆效的字符编码输出给客户端,于是便出现了乱码,为此ServletResponse接⼝中便定义了setCharacterEncoding、setContentType等⽅法来指定getWriter⽅法返回的PrintWriter对象所使⽤的字符集编码,所以我们在写Servlet程序中,在调⽤getWriter⽅法之前设置这些⽅法的值。
只要编写Servlet⽂件中含有响应给客户端的信息,那么就要写上这两句话。最好写上第⼆句话,因为它的优先级⾼,它的设置结果将覆盖setContentType等⽅法设置的字符编码集。
六、修改Tomcat的编码
在get请求所导致乱码问题中,还有⼀种解决的⽅案,我们常⽤Tomcat作为运⾏Servlet和JSP的容器,
⽽Tomcat内部默认的编码是ISO-8859-1,所以对于get请求⽅式,其传递的数据(URI)会附加在访问的资源后⾯,其编码是Tomcat默认的,如果修改该URI的编码,那么对于所有的get请求⽅式便不会出现乱码了包括上边说的重定向和超链接,在Tomcat的配置⽂件l 中到修改Tomcat的端⼝的地⽅,在其内部加⼊URIEncoding属性,设置为和你的项⽬中所设的编码⼀样的值,这⾥全部都是UTF-8。
在编写Servlet和JSP的时候,为了避免出现乱码,最重要的就是:采⽤⼀致的编码,如果编码都⼀致了,肯定不会出现乱码。
以上这篇解决中⽂乱码的⼏种解决⽅法(推荐)就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。