jsp中文乱码终极解决方法
一 找出问题的根源
乱码可能出现的地方:1 jsp页面中
2 jsp页面之间相互传参的参数
3 与数据库中数据的存取
基本归纳为以上几种。
二 寻找解决
方案 1 出现在jsp页面中,是由于没有设置jsp页面的中文字符编码。
2 出现在jsp页面之间相互传参,是由于参数没有设置正确的字符编码。
3 以上2个问题解决了,那么存到数据库中,自然就不存在乱码。除非你对存入到数据库里的数据再次进行编码。
三解决方法:
1的解决方法
<% @ page contentType = " text/html;charset=gb2312 " %>
加上这句解决jsp页面中的中文乱码显示,tomcat编译完后向客户端输出的html文件不是采
用中文编码,所以会导致乱码产生。
2的解决方法
2.1 <% request.setCharacterEncoding( " gb2312 " ); %>
加上这句解决jsp页面中的中文参数传递乱码。
因为浏览器默认使用的编码是“UTF-8”发送请求参数。
我们把它改为"gb2312"就ok了。
2.2 String(request.getParameter("name").getBytes("ISO8859_1"),"GB2312");
这句的意思是,把传来的参数全部编码转换成gb2312,这样做的缺点是每次传来一个参数
都要这样写,很麻烦。
同样可通过设置server.xml配置文件来实现。
< Connector
port ="8080" maxHttpHeaderSize ="8192"
maxThreads ="150" minSpareThreads ="25" maxSpareThreads ="75"
enableLookups ="false" redirectPort ="8443" acceptCount ="100"
connectionTimeout ="20000" disableUploadTimeout ="true" URIEncoding ="gb2312" />
但是这样就应用到整个webapp中去了。
另: <% @page pageEncoding = " gb2312 " %>
此句是为了让jsp编译器能正确地解码含有中文字符的jsp页面。
其它方法还可以修改web.xml文件,配置一个过滤器。其原理都一样,只是换种方式而已。
有的书上专门写了一个函数来解决乱码,实际上对比一下就知道那种解决方法的好与坏。
回过头来一看,解决乱码也不过如此。
ok,实际就加上这3句搞定问题。
<% @page pageEncoding = " gb2312 " %>
<% @ page contentType = " text/html;charset=gb2312 " %>
<% request.setCharacterEncoding( " gb2312 " ); %>
servlet有关乱码
今天在部署一个
webservices
程序的时候,从页面获取数据的servlet出现了乱码问题,在servlet中我已经把request.setCharacterEncoding("GB2312");这段文字加入到代码中去,但是还是出现乱麻问题。
到网上找资料,如下:JAVA是Unicode编码,你先转换成ISO8859-1,然后再转换成GBK或是GB2312.
java 代码
request.setCharacterEncoding("ISO8859-1");
ad=request.getParameter("name");
byte[] temp3 = ad.getBytes("GBK");
String str = new String(temp3);
这样就是中文啦!
还有一种更简单的方法,就是直接在服务器里设置编码转换。用的是TOMCAT5.0.28。
在..\Tomcat 5.0\conf目录里找到SERVER.XML文件,用写字板打开它,设置如下:
里面增加一个属性就可以了,URIEncoding="GBK"
测试通过,搞定,然后就是request.setCharacterEncoding("GB2312")这句话到底起了什么作用,如果它不能解决乱麻问题,我们用它来起什么作用,整理资料如下:
(一) JSP页面上是中文,但是看的是后是乱码:
解决的办法就是在JSP页面的编码的地方,因为Jsp转成Java文件时的编码
问题,默认的话有的服务器是ISO-8859-1,如果一个JSP中直接输入了中文,Jsp把它当作 ISO8859-1来处理是肯定有问题的,这一点,我们可以通过查看Jasper所生成的
Java中间文件来确认
(二) 当用Request对象获取客户提交的汉字代码的时候,会出现乱码:
解决的办法是:要配置一个filter,也就是一个Servelet的过滤器,代码如下:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)throws IOException, ServletException {
r