以下文章轉自互聯網,以備自查,若有版權請及時聯系我們刪除,謝謝!
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.FilterConfig;
public class SetCharacterEncodingFilter implements Filter {
protected String encoding;
protected FilterConfig filterConfig;
protected boolean ignore;
public SetCharacterEncodingFilter(){
encoding=null;
filterConfig=null;
ignore=true;
}
public void destroy(){
encoding=null;
filterConfig=null;
}
//真實的設置Encoding的代碼
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);
}
//進入這個過濾器,首先執行的是init方法,此處代碼從web.xml中得到系統是否要setCharacterEncoding并且用哪種編碼
public void init(FilterConfig filterConfig)throws ServletException{
this.filterConfig=filterConfig;
encoding=filterConfig.getInitParameter("encoding");
String value=filterConfig.getInitParameter("ignore");
if(value==null) ignore=true;
else if(value.equalsIgnoreCase("true")) ignore=true;
else if(value.equalsIgnoreCase("yes")) ignore=true;
else ignore=false;
}
protected String selectEncoding(ServletRequest request){
return encoding;
}
}
把/root/apache-tomcat-5.5.23/webapps/servlets-examples/WEB-INF/classes/filters目錄下把
SetCharacterEncodingFilter.class導入工程的包中,例如我的為zhouzhiwei.survey.books
在工程目錄的WebRoot/WEB-INF/web.xml添加
setCharEncoding
cn.myWiki.tools.SetCharacterEncodingFilter
encoding
gb2312
enable
true
setCharEncoding
/*
以下內容有關Mysql的中文處理
這段時間做的項目要用到Mysql。一說到Mysql ,中文問題就是初使用者的一個門檻!每個要錄入中文的功能、表都不可避免的問題.在這里就以我做的一個小型測試項目(日記管理系統)說起,開發工具myeclipse6.0, Dreamweaver8.0,數據庫Mysql 6.0 ,notepad編寫SQL,服務器:JBOSS4.0
首先在建立WEB工程的時候要選好編碼,我們一般用UTF-8,因為UTF-8是國際標準編碼,集成的字符集比GBK 、GBK2312要多. 也有利于整個項目的擴展性。
然后到每一個Servlet ,jsp 頁面都要將編碼設置成UTF-8,還有一個問題就是JBOSS 是會區分UTF-8的大小寫的所以最好就是用大寫,以免功虧一簣。
JSP里面的設置:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
還有在META 里面也要設置
到了最關鍵的地方就是連接數據庫的語句.(在本工程里面用的是JDBC直連,可以去MYSQL官方網站下載驅動)
要在語句后面加兩個參數,代碼如下:
url = "jdbc:mysql://localhost/diarydb?useUnicode=true&characterEncoding=UTF-8";
注意在Hibernate中要改成這樣 把“&”符號改成 html標記 & 否則報錯
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(url,"user","pwd");
stmt = con.createStatement();
} catch (ClassNotFoundException e) {
// TODO: handle exception
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
到這里為止整個工程的設置告一段落,后面緊跟著的就是建庫,建表的設置問題;
如果對MYSQL語句不熟,可以直接用客戶端工具(本人推薦navicat 不過是要錢D,這沒關系,破解版在中國是沒辦法找不到的) , 但我在這里就只演示一下代碼,如下:
drop database diarydb;
create database diarydb;
alter database diarydb character set utf8; ----設置數據庫編碼;
use diarydb;
create table userinfotable
(
uid int primary key not null ,
uname varchar(20) ,
upwd varchar(20),
uclass int
)ENGINE=InnoDB DEFAULT CHARSET=utf8; -----設置表的編碼;
好啦,經過以上一翻掘地三尺的設置,我們可愛的中文終于可以顯示在久違了的browser上了.各位使用MYSQL遇到中文問題的朋友們,希望我的這些資料能幫上你的忙……
mysql對中文的支持不是很好,對編碼的分類很細,可以細到某個數據庫里面的某個表的某個列用什么編碼。默認情況下用的是latin1,要顯示中文的話就要用utf8,一般創建數據庫都不會明確的寫用什么編碼,所以問題就出現了。解決辦法是把mysql安裝文件夾下面的my.ini里面所有的default-character-set=lartin1改為=utf8,然后重啟數據庫,并把原來建的數據庫重新建一次(因為改之前建的用了lartin1的編碼,如果不方便重建也可以選擇把它倒出來再導回去)。
以上是對于在Windows環境下Mysql的配置。如下是在linux環境下的配置:
中文存入mysql數據表出現的亂碼,從JSP頁面讀取mysql中文數據出現亂碼,以及在sell環境下查看數據庫表中文數據出現亂碼。
linux平臺:ubuntu6.10
mysql版本:5.0
瀏覽器:firefox2.0
為了解決中文亂碼的問題首先就是要同一字符集,我采用utf-8。
第一步:安裝mysql后,修改配置文件/etc/mysql/my.cnf 找到相應項并添加如下字段,如下所示:(注意是添加,配置文件中其他不相關的內容下面并沒有列出來)
[client]
default-character-set=utf8
[mysqld_safe]
default-character-set=utf8
[mysqld]
default-character-set=utf8
[mysql]
default-character-set=utf8
重新啟動mysql服務,進入sell終端,進入mysql的命令提示符下輸入如下指令:
mysql>show variables like '%char%';
如果出現的列表各項內容和以下相同表明配置成功了,
+-----------------------+-----------------------
| Variable_name | Value
+-----------------------+-----------------------
| character_set_client | utf8
| character_set_connection | utf8
| character_set_database | utf8
| character_set_filesystem | binary
| character_set_results | utf8
| character_set_server | utf8
| character_set_system | utf8
| character_sets_dir | /usr/share/mysql/charsets/
+---------------------+---------------------------
第二步:在要發送中文或者要讀取中文的JSP頁面(最好所有頁面)都添加如下聲明:
<%@page pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=utf-8"%>
<% request.setCharacterEncoding("utf-8"); %>
在標簽對中添加如下:
注意在servlet中對請求進行響應的方法中同樣要有:
response.setContentType("text/html;charset=utf-8");
第三步:(由于不明原因firefox發送的請求仍然是latin1的時候執行這一步)
在將請求的參數插入數據庫之前還要再執行一次轉碼(將latin1編碼轉換為utf-8),例如:
String utf8_str = new String( latin_str .getBytes("latin1"),"utf-8");
這一步可以寫在一個過濾器中,不怕麻煩也可以在每一次在將請求數據插入之前都進行一次轉碼。
另外:在連接數據庫的時候可以不用加上字符集參數了,直接用用戶名和密碼連接就可以了,如連接:
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/數據庫名","用戶名","密碼");