• <nav id="cg0su"><code id="cg0su"></code></nav>
  • <nav id="cg0su"><code id="cg0su"></code></nav>

    解決jsp,tomcat,MYSQL下中文亂碼問題

    以下文章轉自互聯網,以備自查,若有版權請及時聯系我們刪除,謝謝!
    
    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/數據庫名","用戶名","密碼");
    影音先锋女人av鲁色资源网
  • <nav id="cg0su"><code id="cg0su"></code></nav>
  • <nav id="cg0su"><code id="cg0su"></code></nav>