Jsp中文乱码小议

林海竹源

贡献于2013-06-10

字数:2479 关键词: JSP Java开发

Jsp中文乱码小议                         -------郭鹏 Jsp是一个很热门的话题,但让大多数人都头痛的是JSP页面中的乱码问题,笔者身有体会;曾为了解决中文乱码问题郁闷了好几天,试了很多方法都不行。最后在JSP专业人士的帮助下,终于解决。之后笔者曾对此做了一些小的研究。 首先我们先了解一下问题的原因。一般情况在在每个JSP页的头部都有这样一条语句: <%   page   contentType= "text/html;   charset=gb2312 "   %> 这条语句决定了此页面使用GB2312编码形式,而在数据库中一般用的是iso-8859-1字符集存储数据.   而Java程序在处理字符时默认采用统一的ISO-8859-1字符集(体现Java国际化思想),所以在添加数据时,默认的字符集编码是iso-8859-1,而页面采用的是GB2312,所以就出现乱码问题。为解决此问题应在存储的时候把GB2312换转成iso-8859-1。有此时候在读出时也会出现乱码,那么只需反过来就可以了,把iso-8859-1转换成GB2312。 具体实例归纳了以下几点,也许会对大家有一些帮助。 1、 在建立JSP页面时应该注意在jsp页面的头部加入一下代码 <%   page   contentType= "text/html;   charset=gb2312 "   %> 此方法是解决JSP页面显示时的乱码。 2、 有时还需在HTML代码中的 中加入这句 3、 在bean中用的是iso-8859-1编码,在jsp中一般用GB2312编码,处理此类乱码问题如下 String   str=new   String(strName.getBytes(“iso-8859-1”),”GB2312”); 具体用到此方法的地方为,当提交表单到bean(bean的功能是存储数据到数据库)表单提交后,数据库中存入的数据确变成了????,因此在调用bean之前应对编码进行转换,方法:String   str=new   String(request.getParameter().getBytes(“iso-8859-1”),”GB2312”); 这样,存入数据库的数据库的数据就可见了。 4、 对于页面间的参数传递也可以用这个方法来处理乱码问题:       public   String   getStr(String   str)       {               try       {             String   temp_p=str;     byte[]   temp_t=temp_p.getBytes( "ISO8859-1 ");     String   temp=new   String(temp_t);     return   temp;       }       catch(Exception   e)       {}       return   "null "; } 5、 在表单定义时加上这个属性有时也可以解决表单提交过程中出现的乱码
6、 提交英文字符能正确显示,如果提交中文时就会出现乱码。原因:浏览器默认使用UTF-8编码方式来发送请求,而UTF-8和GB2312编码方式表示字符时不一样,这样就出现了不能识别字符。解决办法:通过request.setCharacterEncoding( "gb2312 ")对请求进行统一编码,就实现了中文的正常显示。 7、mysql乱码: 在书写连接数据库的类时,按如下格式编写url: String url="jdbc:mysql://localhost/xscj?useUnicode=true&characterEncoding=gb2312"; 8、另一个典型例子 在link.jsp上有一个超级链接如下: 00001 在lingk1.jsp上要想接收到ss代表的“张三”,必须采用以下办法,否则出现乱码 String s2=request.getParameter("ss"); String s3=new String(s2.getBytes("iso8859-1"),"gbk"); out.print(s3); 9 表单get提交方式的乱码处理方式。 如果使用get方式提交中文,接受参数的页面也会出现乱码,这个乱码的原因也是tomcat的内部编码格 式iso8859-1导致。Tomcat会以get的缺省编码方式iso8859-1对汉字进行编码,编码后追加到url,导致 接受页面得到的参数为乱码/、。 解决办法: A 使用上例中的第一种方式,对接受到的字符进行解码,再转码。 B Get走的是url提交,而在进入url之前已经进行了iso8859-1的编码处理。要想影响这个编码则需要在 server.xml的Connector节点增加useBodyEncodingForURI="true" 属性配置,即可控制tomcat对get方式的汉字编码方式,上面这个属性控制get提交也是用 request.setCharacterEncoding("UTF-8")所设置的编码格式进行编码。所以自动编码为utf-8,接受页 面正常接受就可以了。但我认为真正的编码过程是,tomcat又要根据 里面所设置的URIEncoding=”UTF-8”再进行一次编码,但是由于已经编码为utf-8,再编码也不会有变 化了。如果是从url获取编码,接受页面则是根据URIEncoding=”UTF-8”来进行解码的。

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 2 金币 [ 分享文档获得金币 ]
1 人已下载

下载文档

相关文档