又谈乱码问题解决

本文介绍了在Web应用中遇到的乱码问题及其解决方案。通过调整Tomcat配置文件中的URIEncoding参数为GBK,可以有效解决URL传递参数时出现的乱码问题。

有人说,乱码问题一直跟中国的程序员特别有缘,真是再同意不过了,不管是Struts,JSF,JSP,还是MySQL,Tomcat,全都或多或少有乱码的问题。
一般的做法有用Filter:

None.gif < filter >
None.gif    
< filter-name > Set Character Encoding </ filter-name >
None.gif    
< filter-class > org.springframework.web.filter.CharacterEncodingFilter </ filter-class >
None.gif    
< init-param >
None.gif      
< param-name > encoding </ param-name >
None.gif      
< param-value > GBK </ param-value >
None.gif    
</ init-param >
None.gif    
< init-param >
None.gif      
< param-name > ignore </ param-name >
None.gif      
< param-value > true </ param-value >
None.gif    
</ init-param >
None.gif  
</ filter >
None.gif  
< filter-mapping >
None.gif    
< filter-name > Set Character Encoding </ filter-name >
None.gif    
< url-pattern > *.do </ url-pattern >
None.gif  
</ filter-mapping >
None.gif  
< filter-mapping >
None.gif    
< filter-name > Set Character Encoding </ filter-name >
None.gif    
< url-pattern > *.jsp </ url-pattern >
None.gif  
</ filter-mapping >
None.gif  
< filter-mapping >
None.gif    
< filter-name > Set Character Encoding </ filter-name >
None.gif    
< url-pattern > *.html </ url-pattern >
None.gif  
</ filter-mapping >
None.gif  
< filter-mapping >
None.gif    
< filter-name > Set Character Encoding </ filter-name >
None.gif    
< url-pattern > *.htm </ url-pattern >
None.gif  
</ filter-mapping >


的,有用

None.gif <% request.setCharacterEncoding( " GBK " ); %>

的,还有用

None.gif <% @ page contentType = " text/html; charset=GBK "  pageEncoding = " GBK " %>


的,还可以用

None.gif <%  String name  =   new  String(request.getParameter( " name " ).getBytes( " 8859_1 " ),  " GB2312 " );  %>


昨天就在做项目的过程中,发现用URL传request参数的时候,在第二个页面上得到乱码的问题。把上面几种方法都试了一下还是不行。仔细追踪了一下,发现在页面的源代码上中文是正常的,一直到URL还是中文正常,可是在后台的Action里面log出来就成了乱码了,于是猜想是在request封装的过程中把中文变成乱码了,以致于后台直接就是取到的乱码。在后台Action中Set入中文,页面上正常显示,说明Struts的中文已经不存在问题。剩下的,应该就只有doGet和doPost方法的问题了。找了一下tomcat的配置文件,发现只要在server.xml中:

None.gif      <!--  Define a non-SSL HTTP/1.1 Connector on port 8080  -->
None.gif    
< Connector  port ="8080"  maxHttpHeaderSize ="8192"
None.gif               maxThreads
="150"  minSpareThreads ="25"  maxSpareThreads ="75"
None.gif               enableLookups
="false"  redirectPort ="8443"  acceptCount ="100"
None.gif               connectionTimeout
="20000"  disableUploadTimeout ="true" />
None.gif    
<!--  Note : To disable connection timeouts, set connectionTimeout value
None.gif     to 0 
-->

改为

None.gif      <!--  Define a non-SSL HTTP/1.1 Connector on port 8080  -->
None.gif    
< Connector  port ="8080"  maxHttpHeaderSize ="8192"
None.gif               maxThreads
="150"  minSpareThreads ="25"  maxSpareThreads ="75"
None.gif               enableLookups
="false"  redirectPort ="8443"  acceptCount ="100"
None.gif               connectionTimeout
="20000"  disableUploadTimeout ="true"  URIEncoding ="GBK" />
None.gif    
<!--  Note : To disable connection timeouts, set connectionTimeout value
None.gif     to 0 
-->

就是加上URIEncoding="GBK"就万事大吉了。
至此,应该再困难的乱码问题都解决了吧。就是要在页面上、数据库中、request里、doGet、doPost方法里面都是中文!看你还有什么地方躲??

95604.html

Zou Ang 2007-01-23 21:12 发表评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值