posts - 10, comments - 9, trackbacks - 0, articles - 17
          一. 使用 方法調(diào)用處理中文:
              public static String changeStr(String str){    
                  
          if(str==null)return null;
                  String temp
          =null;
                  
          try {
                      temp 
          = new String(str.getBytes("ISO-8859-1"));
                  } 
          catch (UnsupportedEncodingException e) {
                      
                      e.printStackTrace();
                  }
                  
          return temp;
              }

            我們將這個(gè)方法作為靜態(tài)寫入了BaseAction中,使所有的方法都能調(diào)用。
              String offername = changeStr(request.getParameter("offername"));
          這種方法的好處是: 無(wú)論是POST/GET的頁(yè)面表單,還是重寫的URL他都一并處理了。寫起來(lái)也簡(jiǎn)單
          可問(wèn)題是:對(duì)于所有頁(yè)面參數(shù)幾乎都要調(diào)用一下這個(gè)方法,對(duì)于大的工程就很不合適了。
                          特別是參數(shù)很多的Form中,所有的參數(shù)都要用它處理一次。雖然我把這個(gè)處理寫入了驗(yàn)證中自動(dòng)調(diào)用。
                      但是還是感覺(jué)比較麻煩。

           

          二. 使用 過(guò)濾器 Filter
          1 新建一個(gè)java文件:SetCharacterEncodingFilter


           
          import java.io.IOException;
           
          import javax.servlet.Filter;
          import javax.servlet.FilterChain;
          import javax.servlet.FilterConfig;
          import javax.servlet.ServletException;
          import javax.servlet.ServletRequest;
          import javax.servlet.ServletResponse;
           
          public class CharacterEncodingFilter implements Filter {
           
              
          private FilterConfig config;
              
          private String encoding;
           
              
          public void destroy() {
                  
          // 銷毀配置
                  this.config = null;
           
              }
           
              
          public void doFilter(ServletRequest request, ServletResponse response,
                      FilterChain chain) 
          throws IOException, ServletException {
                  
          // 如果編碼已經(jīng)配置, 則使用該編碼.
                  if(this.encoding != null) {
                      request.setCharacterEncoding(
          this.encoding);
                  }
                  
          // 將資源鏈到下一Filter, 如果這是最后一個(gè)Filter, 則將資源鏈到目的位置.
                  chain.doFilter(request, response);
           
              }
           
              
          public void init(FilterConfig config) throws ServletException {
                  
          // 方便銷毀配置
                  this.config = config;
                  
          // 讀取web.xml中CharacterEncodingFilter內(nèi)的初始編碼參數(shù)
                  this.encoding = this.config.getInitParameter("encoding");
           
              }

          2 在web.xml中 根節(jié)點(diǎn)下加入
          <!-- 設(shè)置request編碼方式  -->
             
          <filter>
                  
          <filter-name>Set Character Encoding</filter-name>
                  
          <filter-class>com.neusoft.struts.platform.SetCharacterEncodingFilter</filter-class>
                  
          <init-param>
                      
          <param-name>encoding</param-name>
                      
          <param-value>GB2312</param-value>
                  
          </init-param>
                  
          <init-param>
                      
          <param-name>ignore</param-name>
                      
          <param-value>true</param-value>
                  
          </init-param>
              
          </filter>
              
          <filter-mapping>
                  
          <filter-name>Set Character Encoding</filter-name>
                  
          <url-pattern>*</url-pattern>
             
          </filter-mapping>

          使用過(guò)濾器 可謂是一勞永逸,所有頁(yè)面表單是POST的請(qǐng)求,即所有struts中的Form基本都OK了。
          但注意:它也僅對(duì)POST請(qǐng)求有效。對(duì)于GET請(qǐng)求和重寫URL的請(qǐng)求,它也會(huì)去處理,但由于他們和POST的編碼區(qū)別,
          過(guò)濾器會(huì)把他們過(guò)濾成??

            解決方法:
          找到Tomcat安裝目錄內(nèi)conf文件夾下的server.xml文件,
          給其中的連接器元素Connector添加屬性: URIEncoding, 屬性值為: UTF-8.

          1  <Connector port="8080" protocol="HTTP/1.1" 
          2                connectionTimeout="20000" 
          3                redirectPort="8443"
          4                URIEncoding="UTF-8" />

           

          關(guān)于亂碼詳細(xì)問(wèn)題即解決,見(jiàn) 亂碼問(wèn)題詳解

          Feedback

          # re: 2種中文亂碼處理--方法和過(guò)濾器  回復(fù)  更多評(píng)論   

          2009-03-12 17:29 by 打發(fā)
          支持下 謝謝,學(xué)習(xí)了!
          主站蜘蛛池模板: 安化县| 来凤县| 江安县| 尉犁县| 淅川县| 司法| 正宁县| 石嘴山市| 两当县| 江川县| 平顺县| 平陆县| 九龙坡区| 安阳县| 博客| 枣阳市| 伊吾县| 东兰县| 叶城县| 江达县| 宁晋县| 固镇县| 东平县| 耿马| 汤阴县| 大石桥市| 灵山县| 衡阳县| 武鸣县| 永城市| 新营市| 四子王旗| 伊金霍洛旗| 安远县| 余姚市| 彭泽县| 青阳县| 福州市| 习水县| 石泉县| 石城县|