溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL手冊中查到的JSP中文亂碼如何解決

發(fā)布時間:2021-07-14 14:50:36 來源:億速云 閱讀:152 作者:chen 欄目:編程語言

本篇內(nèi)容主要講解“MySQL手冊中查到的JSP中文亂碼如何解決”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“MySQL手冊中查到的JSP中文亂碼如何解決”吧!

有關(guān)JSP中文亂碼問題有不少解決方法。首先實現(xiàn)了一個StringConvert bean(GBtoISO()和ISOtoGB()兩個方法),解決了與MySQL數(shù)據(jù)庫交互的時候的部分中文亂碼問題:在JSP程序中讀取MySQL的中文內(nèi)容,用這兩個方法可以解決亂碼問題。

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

碰壁多次,終于發(fā)現(xiàn)一條解決問題的路徑:查看MySQL手冊的時候,看到一條這樣的語句: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)威指南》時,發(fā)現(xiàn)在查詢語句中可以使用這樣的語法將字符串轉(zhuǎn)換到一個給定的字符集:_charset str。

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

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

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

INSERT INTOpublish Values('8',_utf8 '高等教育出版社') 這下更干脆,什么都沒有?。?/p>

JSP中文亂碼問題仍然存在。沒辦法,用show character set;命令查看MySQL支持的字符集,心想我都試一遍總有一個能成功吧。瀏覽了一下,發(fā)現(xiàn)沒有幾個熟悉的字符集,就只剩下一個latin1(ISO-8859-1)比較常見了,不會是它吧,一試之下果然便是。

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

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

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

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

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

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

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

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

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

到此,相信大家對“MySQL手冊中查到的JSP中文亂碼如何解決”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI