<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    空間站

    北極心空

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
    首先實(shí)現(xiàn)了一個(gè)StringConvert bean(GBtoISO()和ISOtoGB()兩個(gè)方法),解決了與MySQL數(shù)據(jù)庫(kù)交互的時(shí)候的部分中文亂碼問題:在JSP程序中讀取MySQL的中文內(nèi)容,用這兩個(gè)方法可以解決亂碼問題。

    ????
    但是從JSP寫入到MySQL的中文內(nèi)容都成了亂碼,并且再讀出來的時(shí)候也顯示為“??”,在這里應(yīng)該出現(xiàn)了編碼轉(zhuǎn)換過程中的字符信息丟失。郁悶的是,我
    在命令行窗口中登陸到MySQL后,執(zhí)行如“INSERT INTO customer
    VALUES('字符',...)”這樣的語(yǔ)句時(shí),寫入到數(shù)據(jù)表中的中文內(nèi)容又是顯示正常的!!!數(shù)據(jù)庫(kù)使用的字符集是utf8。


    ??? ?


    ???? 碰壁多次,終于發(fā)現(xiàn)一條解決問題的路徑:查看MySQL手冊(cè)的時(shí)候,看到一條這樣的語(yǔ)句:To
    allow multiple character sets to be sent from the client, the "UTF-8"
    encoding should be used, either by configuring "utf8" as the default
    server character set, or by configuring the JDBC driver to use "UTF-8"
    through the characterEncoding property.


    ??? ?


    ???? 此外,在查閱《MySQL權(quán)威指南》時(shí),發(fā)現(xiàn)在查詢語(yǔ)句中可以使用這樣的語(yǔ)法將字符串轉(zhuǎn)換到一個(gè)給定的字符集:_charset str。


    ???? 其中charset必須是服務(wù)器支持的某個(gè)字符集。在本例中,shopdb數(shù)據(jù)庫(kù)使用的默認(rèn)字符集是utf8,于是開始測(cè)試:


    ???? 先輸入INSERT INTO publish Values('8',_gb2312 '高等教育出版社')? 寫入后中文變成“??”


    ???? 再試INSERT INTO publish Values('8',_gbk '高等教育出版社') 結(jié)果同上


    ???? INSERT INTO publish Values('8',_utf8 '高等教育出版社') 這下更干脆,什么都沒有!!


    ??? ?


    ????   快瘋了!!沒辦法,用show character set;命令查看MySQL支持的字符集,心想我都試一遍總有一個(gè)能成功吧。瀏覽了一下,發(fā)現(xiàn)沒有幾個(gè)熟悉的字符集,就只剩下一個(gè)latin1(ISO-8859-1)比較常見了,不會(huì)是它吧,一試之下果然便是。


    ???? INSERT INTO publish Values('8',_latin1 '高等教育出版社') 輸入中文能夠正確顯示。


    ??? ?


    ????   這下總算找到方法了,把Tomcat下配置的數(shù)據(jù)庫(kù)連接池的url改為"...characterEncoding=UTF-8",然后把寫入數(shù)據(jù)庫(kù)的中文內(nèi)容用


    ???? String s2 = new String(s1.getBytes("gb2312"),"ISO-8859-1")進(jìn)行轉(zhuǎn)碼,其中s1為中文字符串.然后再寫入到數(shù)據(jù)庫(kù)一切顯示正常。


    ??? ?


    ????   為解決這個(gè)問題查看了n多資料,現(xiàn)作一個(gè)總結(jié):由于字符集和字符編碼方式的不同,在OS以及程序之間傳遞數(shù)據(jù)(尤其是multiple character sets中的數(shù)據(jù))時(shí)便會(huì)產(chǎn)生亂碼以及字符信息的丟失.解決這個(gè)問題的關(guān)鍵便是了解數(shù)據(jù)輸出端和接收端使用的字符集和字符編碼方式,如果這兩種編碼方式不同,便需要在數(shù)據(jù)出口或入口處進(jìn)行 轉(zhuǎn)碼。一般的說,在編寫代碼,編譯,以及運(yùn)行期間都會(huì)字符數(shù)據(jù)的傳遞,因此需要特別小心。


    ????  在編寫代碼的時(shí)候,你可能會(huì)使用某種開發(fā)工具,例如我正在使用的Eclipse.或許在寫的時(shí)候一切正常,可是一旦保存后再次打開文檔,所有的中文字符都變成了亂碼。這是因?yàn)樵诰帉懙臅r(shí)候,這些字符數(shù)據(jù)都在內(nèi)存的某個(gè)stream中,ok,這沒問題,可是保存的時(shí)候這個(gè)stream中的數(shù)據(jù)會(huì)被寫入到硬盤,使用的就是你的開發(fā)工具默認(rèn)的編碼方式,如果很不幸你的開發(fā)工具默認(rèn)編碼方式是ISO-8859-1,中文字符信息就不能正確地存儲(chǔ)。Eclipse中可以這樣查看并修改默認(rèn)字符編碼方式:Project->Properties->info,這里有"default

    ???? encoding for text file"。如果設(shè)置為GBK,那么編寫代碼并保存這關(guān)就過了。


    ????  對(duì)于JSP程序而言,編寫完代碼后就交給Container,首先它們會(huì)被轉(zhuǎn)成.java文件,然后編譯成.class才能提交給服務(wù)器執(zhí)行.這個(gè)過程也存在字符編碼問題.java編譯器(javac)使用操作系統(tǒng)的語(yǔ)言環(huán)境作為默認(rèn)的字符編碼方式,JRE(Java Runtime Environment)也是這樣。只有當(dāng)編譯和運(yùn)行環(huán)境的字符編碼方式與存儲(chǔ)源文件的編碼方式相同時(shí),中文字符才能正確地顯示。否則就需要在運(yùn)行時(shí)進(jìn)行轉(zhuǎn)碼,使它們使用兼容的編碼。這里的設(shè)置可以分為幾個(gè)層次:操作系統(tǒng)層支持的語(yǔ)言,這是最重要的,因?yàn)樗鼤?huì)影響JVM的默認(rèn)字符編碼方式,同時(shí)對(duì)字符的顯示,如字體等有直接影響;J2EE服務(wù)器層,大多數(shù)服務(wù)器都可以對(duì)字符編碼進(jìn)行自定義的配置,例如Tomcat就可以通過web.xml中設(shè)置javaEncoding參數(shù)設(shè)置字符編碼,默認(rèn)是UTF-8.


    ???? IE也可以設(shè)置成總是使用UTF-8編碼來發(fā)送請(qǐng)求.應(yīng)用程序層,每個(gè)配置在服務(wù)器下的程序都可以設(shè)置自己的編碼方式,這個(gè)我目前還沒有用到,以后再學(xué)習(xí)。


    ????  運(yùn)行時(shí)的轉(zhuǎn)碼,運(yùn)行時(shí)期,應(yīng)用程序很可能需要與外部系統(tǒng)進(jìn)行交互,例如對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀寫,對(duì)外部文件進(jìn)行讀寫.在這些情況下,應(yīng)用程序免不了要和外部系統(tǒng)進(jìn)行數(shù)據(jù)交換。那么對(duì)于中文字符, 數(shù)據(jù)出入口的編碼方式就顯得特別重要了。一般外部系統(tǒng)都有自己的字符編碼方式,我的例子中配置的MySQL就是使用的UTF-8編碼。JSP頁(yè)面通過設(shè)定"charset=gb2312",


    ??? 使用gb2312編碼,在它與數(shù)據(jù)庫(kù)交互的時(shí)候就需要進(jìn)行顯式的轉(zhuǎn)碼才能正確處理中文字符

    posted on 2006-11-02 14:27 蘆葦 閱讀(1107) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产精品成人四虎免费视频| 亚洲欧洲日本在线观看| 全免费a级毛片免费**视频| 国产午夜无码精品免费看动漫 | 日韩视频免费在线观看| 国产偷国产偷亚洲高清人| 亚洲成a人片在线观看播放| 亚洲人色婷婷成人网站在线观看| 香蕉高清免费永久在线视频| 麻花传媒剧在线mv免费观看| 两个人看的www免费视频中文| 免费激情网站国产高清第一页| 亚洲欧美国产精品专区久久| 亚洲同性男gay网站在线观看| 国产精品亚洲精品日韩已满| 精品国产亚洲男女在线线电影| 国产成人免费片在线观看| 国产91免费在线观看| 24小时日本韩国高清免费| 久久国产免费一区二区三区| 中文字幕免费在线观看动作大片 | 免费v片视频在线观看视频| 四虎影院免费在线播放| 免费能直接在线观看黄的视频 | 国产成人亚洲精品狼色在线| 又粗又硬免费毛片| 国产亚洲精品免费| 国产大片91精品免费观看男同| 全免费一级毛片在线播放| 日本高清免费网站| 国产一级大片免费看| 免费中文字幕一级毛片| 亚洲成a人片在线观看国产| 国产成人精品免费视频软件| 免费a级毛片网站| 亚洲国产日韩成人综合天堂| 亚洲色婷婷综合开心网| 国产亚洲精品成人AA片新蒲金| 国产精品亚洲A∨天堂不卡| 亚洲av综合av一区| 亚洲毛片免费视频|