首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> JSP 程式設計 >> 關於JSP

解決 JSP 開發中文亂碼問題:三大方案完整指南

     編輯:關於JSP

Tomcat 預設編碼為 ISO-8859-1(西歐字元),導致中文顯示為「?」。本文提供三種解決方案,針對不同情境。

方法一:頁面指令設定(最簡單、最常用)

<%@ page language="java" pageEncoding="GBK" %>
或
<%@ page contentType="text/html;charset=gbk" %>

適用於 JSP 頁面顯示中文。GBK 支援字元比 GB2312 多。

方法二:Filter 過濾器(推薦用於表單提交、資料庫存取)

Tomcat 不遵循 request 指定編碼,仍用預設 ISO-8859-1 編碼請求參數。編寫 SetCharacterEncodingFilter:

public class SetCharacterEncodingFilter implements Filter {
    protected String encoding = null;
    protected FilterConfig filterConfig = null;
    protected boolean ignore = true;

    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 this.ignore = false;
    }

    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 destroy() { this.encoding = null; this.filterConfig = null; }
    protected String selectEncoding(ServletRequest request) { return this.encoding; }
}

在 web.xml 註冊:

<filter>
  <filter-name>Set Character Encoding</filter-name>
  <filter-class>com.struts.common.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>

優點:專案層級統一處理,支援國際化(頁面指定 pageEncoding="UTF-8" 即可依 Locale 顯示正確字元集)。

方法三:修改 Tomcat server.xml 的 URIEncoding(針對 URL 參數中文)

<Connector ... URIEncoding="GBK" />

Tomcat 5.0+ 版本 GET/POST 編碼處理不同,URL 中文參數會亂碼;Tomcat 4.1 則無此問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved