徹底治療亂碼頑症——J2EE.Web應用中文問題解決方案(轉)


對於一個Java初學者來說,經常碰到的一個問題恐怕就是中文問題了。其實很正常,我們有幾千年的悠久歷史嘛,博大精深,豈能是小小的計算機語言所能包容 的?呵呵,開個玩笑。但是不可否認的一個事實就是,就算是一個比較有經驗的開發人員,也經常面對着屏幕上的亂碼而大傷腦筋。

  想究其原因、徹底解決這一問題嗎?follow me……

亂碼原因
   java內核是unicode的。但Java總是根據操作系統的默認編碼字符集來決定字符串的初始編碼,而且Java系統的輸入和輸出的都是採取操作系 統的默認編碼,而數據庫、文件、網絡傳輸中的字節流……採用的編碼更是各不相同。所以不可避免的就會出現煩人的亂碼問題了。

解決辦法
  1、GB2312、GBK、Unicode(UTF8)?
  從字符集的大小比較 GB2312 < GBK < UTF8,很顯然,如果我們採用UTF8作爲系統編碼的話,是不會有錯的。而且如果你要考慮國際化的話,UTF8似乎是你唯一的選擇
  2、開發和編譯代碼時指定字符集爲UTF-8
  JBuilder和Eclipse都可以在項目屬性中設置。
  3、使用過濾器
  編寫過濾器
package com.javer.test.language;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
* <p>Title: EncodingFilter</p>
* @author javer(QQ:84831612)
* @version 1.0
* @link http://blog.csdn.net/java008
*/
public class EncodingFilter
implements Filter
{
FilterConfig config;

public void init(FilterConfig parm1)
throws javax.servlet.ServletException
{
this.config = parm1;
}

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws java.io.IOException, javax.servlet.ServletException
{
if (req.getCharacterEncoding() == null || !req.getCharacterEncoding().equals("UTF-8"))
{
req.setCharacterEncoding("UTF-8");
}
chain.doFilter(req, res);
}

public void destroy()
{
this.config = null;
}
}
在web.xml文件中配置該過濾器
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>javer‘s project</display-name>
<filter>
<filter-name>EncodingFilter</filter-name>
<display-name>EncodingFilter</display-name>
<description>對編碼進行轉換</description>
<filter-class>com.javer.test.language.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
4、在JSP 中進行聲明
  在JSP頭部聲明<%@ page contentType="text/html;charset= UTF-8" %>
  在Jsp的html代碼中聲明<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5、數據庫管理
  一般數據庫都可以通過管理設置設定UTF-8
  也可以通過jdbc鏈接時指定編碼參數,如:mysql:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
  6、其它
  其他所有和外界交互時能夠設定編碼時就設定UTF-8,例如讀取文件,操作XML等。總之,記住一個原則:在所有系統的出入口處都用UTF8編碼進行“翻譯”!
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章