Corsair

          My javaWorld
          數(shù)據(jù)加載中……
          解決linux環(huán)境下jsp+mysql數(shù)據(jù)庫中文亂碼的問題

          經(jīng)過一個(gè)星期的艱苦奮斗終于解決了這個(gè)問題,特將經(jīng)驗(yàn)摘錄下來備忘。本文將解決以下的幾種亂碼問題。

          中文存入 mysql 數(shù)據(jù)表出現(xiàn)的亂碼,從 JSP 頁面讀取 mysql 中文數(shù)據(jù)出現(xiàn)亂碼,以及在 sell 環(huán)境下查看數(shù)據(jù)庫表中文數(shù)據(jù)出現(xiàn)亂碼。

          linux平臺(tái):ubuntu6.10

          mysql版本:5.0

          瀏覽器:firefox2.0

          為了解決中文亂碼的問題首先就是要同一字符集,我采用utf-8

          第一步:安裝mysql后,修改配置文件/etc/mysql/my.cnf 找到相應(yīng)項(xiàng)并添加如下字段,如下所示:(注意是添加,配置文件中其他不相關(guān)的內(nèi)容下面并沒有列出來)

          [client]

          default-character-set=utf8

          [mysqld_safe]

          default-character-set=utf8

          [mysqld]

          default-character-set=utf8

          [mysql]

          default-character-set=utf8

          重新啟動(dòng)mysql服務(wù),進(jìn)入sell終端,進(jìn)入mysql的命令提示符下輸入如下指令:

          mysql>show variables like '%char%';

          如果出現(xiàn)的列表各項(xiàng)內(nèi)容和以下相同表明配置成功了,

          +---------------------+---------------------

          | 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/

          +---------------------+----------------------

          第二步:在要發(fā)送中文或者要讀取中文的JSP頁面(最好所有頁面)都添加如下聲明:

          <%@page pageEncoding="UTF-8"%>

          <%@ page contentType="text/html;charset=utf-8"%>

          <% request.setCharacterEncoding("utf-8"); %>

          <head>標(biāo)簽對(duì)中添加如下:

          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

          注意在servlet中對(duì)請(qǐng)求進(jìn)行響應(yīng)的方法中同樣要有:

          response.setContentType("text/html;charset=utf-8");


          第三步:(由于不明原因firefox發(fā)送的請(qǐng)求仍然是latin1的時(shí)候執(zhí)行這一步)

          在將請(qǐng)求的參數(shù)插入數(shù)據(jù)庫之前還要再執(zhí)行一次轉(zhuǎn)碼(latin1編碼轉(zhuǎn)換為utf-8),例如:

          String utf8_str = new String( latin_str .getBytes("latin1"),"utf-8");

          這一步可以寫在一個(gè)過濾器中,不怕麻煩也可以在每一次在將請(qǐng)求數(shù)據(jù)插入之前都進(jìn)行一次轉(zhuǎn)碼。


          另外:在連接數(shù)據(jù)庫的時(shí)候可以不用加上字符集參數(shù)了,直接用用戶名和密碼連接就可以了,如連接:

          con=DriverManager.getConnection("jdbc:mysql://localhost:3306/數(shù)據(jù)庫名","用戶名","密碼");

          posted on 2007-01-14 20:04 銀河海盜 閱讀(2053) 評(píng)論(0)  編輯  收藏 所屬分類: WEB

          主站蜘蛛池模板: 新乡市| 夹江县| 称多县| 兰考县| 左权县| 凤山县| 龙陵县| 唐海县| 卓资县| 延寿县| 峡江县| 乐清市| 龙井市| 江西省| 松滋市| 遂昌县| 桐庐县| 卢龙县| 榕江县| 牡丹江市| 安达市| 景泰县| 洞头县| 海淀区| 台前县| 科尔| 新乡县| 都江堰市| 土默特右旗| 丁青县| 霸州市| 大洼县| 津市市| 青神县| 华坪县| 剑阁县| 封丘县| 武夷山市| 金山区| 彰化县| 定安县|