程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> JSP中文字符亂碼處理的2種方法

JSP中文字符亂碼處理的2種方法

編輯:關於JSP

    在編寫JSP程序時,常常會碰到中文字符處理的問題,在接受request的中文字符時顯示出來一串亂碼。網上處理方法一籮筐,下面說說我用過的兩種有效地解決辦法:

    1.為程序編寫一個字符串處理函數,用一個靜態文件保存,在需要處理中文字符的JSP頁面中包含它,

    <%!
     public String codeToString(String str)
     {
      String s=str;
      try
      {
       byte temp[]=s.getBytes("ISO-8859-1");
       s=new String(temp);
       return s;
       }
       catch(Exception e)
       {
        return s;
       }
      }
    %>

    要轉換時只需:coedeToString(request.getParameter(..));就可以了,很好用的。

    2.一種普遍適用的方法,加一個過濾器,之後就可以過上一勞永逸的日子了。

     package filters;
    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;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletRequestWrapper;
    public class TomcatFormFilter implements Filter {
    /**
    * Request.java
    * 對 HttpServletRequestWrapper 進行擴充, 不影響原來的功能並能提供所
    有的 HttpServletRequest
    * 接口中的功能. 它可以統一的對 Tomcat 默認設置下的中文問題進行解決而只
    需要用新的 Request 對象替換頁面中的
    * request 對象即可.
    */
    class Request extends HttpServletRequestWrapper
    {
    public Request(HttpServletRequest request) {
    super(request);
    }
    /**
    * 轉換由表單讀取的數據的內碼.
    * 從 ISO 字符轉到 GBK.
    */
    public String toChi(String input) {
    try {
    byte[] bytes = input.getBytes("ISO8859-1");
    return new String(bytes, "GBK");
    }
    catch (Exception ex) {
    }
    return null;
    }
    /**
    * Return the HttpServletRequest holded by this object.
    */
    private HttpServletRequest getHttpServletRequest()
    {
    return (HttpServletRequest)super.getRequest();
    }
    /**
    * 讀取參數 -- 修正了中文問題.
    */
    public String getParameter(String name)
    {
    return
    toChi(getHttpServletRequest().getParameter(name));
    }
    /**
    * 讀取參數列表 - 修正了中文問題.
    */
    public String[] getParameterValues(String name)
    {
    String values[] =
    getHttpServletRequest().getParameterValues(name);
    if (values != null) {
    for (int i = 0; i < values.length; i++) {
    values[i] = toChi(values[i]);
    }
    }
    return values;
    }
    }
    public void destroy() {
    }
    public void doFilter(ServletRequest request, ServletResponse
    response,
    FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpreq = (HttpServletRequest)request;
    if(httpreq.getMethod().equals("POST")) {
    request.setCharacterEncoding("GBK");
    } else {
    request = new Request(httpreq);
    }
    chain.doFilter(request, response);
    }
    public void init(FilterConfig filterConfig) throws
    ServletException {
    }

    當然要記得改下web.xml

      <filter>
      <filter-name>TomcatFormFilter</filter-name> 
       <filter-class>filters.TomcatFormFilter</filter-class> 
      </filter> 
     
      <filter-mapping> 
       <filter-name>TomcatFormFilter</filter-name> 
       <url-pattern>/*</url-pattern> 
      </filter-mapping> 

    上面兩種方法都測試過了,比較好用

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved