Webプログラムにおける文字符号化の問題

2976 ワード

Webプログラムにおける文字符号化の問題
Webプログラムのコーディングの問題は主に3つの方面があります.
  • プログラムファイルの符号化;
  • 出力ページからクライアントへの符号化;
  • ユーザは、サーバ側の符号化に応答する.

  • UTF-8に設定した場合、以下の方法で解決できます.
    1.プログラムファイルの符号化
    直接Eclipseまたは他のIDEで、editorでファイルコードをUTF-8に設定すればよい.
    2.出力ページ
    JSPページには、次のコードを追加します.<%@ page contentType="text/html; charset=UTF-8"%> IEまたはFirefoxで正常に表示されない場合は、Html識別子の下に次のヘッダ情報を加えることもできる<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    3.サーバ側への応答
    私はTomcatを使用していますが、応答符号化を受ける方法を直接設定することはできません(感心しました!)、しかし、1つのFilterを書くことによって符号化変換を実現することができる.
    
    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 SetCharacterEncodingFilter implements Filter {
    
        protected String encoding = null;
        protected FilterConfig filterConfig = null;
        protected boolean ignore = true;
    
        public void destroy() {
            this.encoding = null;
            this.filterConfig = null;
        }
    
        public void doFilter(ServletRequest request, ServletResponse response,
                              FilterChain chain)
            throws IOException, ServletException {
            if (ignore || (request.getCharacterEncoding() == null)) {
                String encoding = selectEncoding(request);
                if (encoding != null)
                    request.setCharacterEncoding(encoding);
            }
            chain.doFilter(request, response);
        }
    
        public void init(FilterConfig filterConfig) throws ServletException {
         this.filterConfig = filterConfig;
            this.encoding = filterConfig.getInitParameter("encoding");
            String value = filterConfig.getInitParameter("ignore");
            if (value == null)
                this.ignore = true;
            else if (value.equalsIgnoreCase("true"))
                this.ignore = true;
            else if (value.equalsIgnoreCase("yes"))
                this.ignore = true;
            else
                this.ignore = false;
        }
    
        protected String selectEncoding(ServletRequest request) {
            return (this.encoding);
        }
    }
    

    SetCharacterEncodingFilterをプログラムのコンパイルディレクトリの下に置き、web.xmlに対応するプロパティを追加
    
    
      
        <filter>
            <filter-name>Set Character Encoding</filter-name>
            <filter-class>hijeff.filters.SetCharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
         
        <filter-mapping>
            <filter-name>Set Character Encoding</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>    
    

    Tomcatは、HTTP応答によるユーザの文字をUTF-8の符号化に変換する