- 相關(guān)推薦
WEB開發(fā)中不同情況下的亂碼處理方案
摘要:隨著時代的改變,現(xiàn)在人們與計算機已經(jīng)是密不可分,信息技術(shù)的應(yīng)用顯得異常重要。而在WEB系統(tǒng)開發(fā)中經(jīng)常出現(xiàn)一些亂碼狀況,本文針對WEB開發(fā)中遇到的不同亂碼情況研究不同的處理方案。在整個B/S請求從客戶端頁面提交內(nèi)容到服務(wù)器,服務(wù)器接收響應(yīng),并從數(shù)據(jù)庫中獲取數(shù)據(jù),經(jīng)過一番處理之后再返回給客戶端的瀏覽器頁面顯示的過程中,只要一個環(huán)節(jié)在轉(zhuǎn)碼過程中有錯誤就會導(dǎo)致亂碼的現(xiàn)象發(fā)生。在計算機系統(tǒng)上突然出現(xiàn)亂碼情況,需要先判斷亂碼的現(xiàn)象,要根據(jù)現(xiàn)象,查出數(shù)據(jù)在整個數(shù)據(jù)流向的過程中,數(shù)據(jù)到底從什么時候什么地方開始由正常開始變?yōu)閬y碼,即找出數(shù)據(jù)變成亂碼的分界點。
關(guān)鍵詞:WEB開發(fā);處理方案;亂碼
引言
亂碼是應(yīng)用系統(tǒng)運行中經(jīng)常出現(xiàn)的一個問題,也是應(yīng)用系統(tǒng)中非常突出而且必須解決的一個問題。由于引起出現(xiàn)亂碼的因素很多,例如:數(shù)據(jù)庫本身的亂碼,字符的亂碼,JDBC與數(shù)據(jù)庫數(shù)據(jù)交換時的編輯問題,所以解決亂碼問題比較復(fù)雜,本文針對這幾個亂碼問題提出了相應(yīng)的解決方案。本文從編碼原理到實際案例對亂碼原因進行詳細的分析,并且整理和歸納了多個項目出現(xiàn)亂碼現(xiàn)象的解決經(jīng)驗,總結(jié)了解決一般性亂碼的辦法和過程。針對我們遇到亂碼問題的經(jīng)驗總結(jié),同時,列出了不同環(huán)境下經(jīng)常遇到過的亂碼問題的解決過程:
一、數(shù)據(jù)庫本身亂碼的解決方案
1.1 比如:Oracle數(shù)據(jù)庫在安裝的過程中就可以選擇某種字符集:ALTER DATABASE CHARACTER SET ZHS16GBK。
查找當前字符集:select userenv('language') from dual;DB2在創(chuàng)建數(shù)據(jù)庫的時候可以指定字符集:create database sccrm using codeset UTF-8 territory CN。
MySQL在創(chuàng)建數(shù)據(jù)庫的時候可以指定字符集:create database testxxx default charset=UTF-8。
1.2 操作系統(tǒng)是否安裝相應(yīng)的字符集(unix下可以用locale查看當前字符集),將相應(yīng)的數(shù)據(jù)打印出來即可。
1.3 Java程序是否存在轉(zhuǎn)碼錯誤,字符集經(jīng)常是在UTF-8、GBK、ISO-8859-1之間轉(zhuǎn)換。
二、應(yīng)用服務(wù)器各個相關(guān)設(shè)置字符集的地方是否設(shè)置正確
找到分界點之后,針對分界點之前和之后,查找在什么地方可以設(shè)置字符集,每一個分界點可以在哪些地方設(shè)置相關(guān)的字符集。如果是程序,可以查找到哪一行代碼獲取數(shù)據(jù)的時候開始亂碼,從而可以考慮修改代碼。如果不是程序,需要查看當前應(yīng)用有哪些地方可以設(shè)置字符集,并且要了解每個設(shè)置字符集的地方,他們之間的相互關(guān)系。
三、對字符亂碼問題定位的常用技巧
在網(wǎng)絡(luò)系統(tǒng)中經(jīng)常會出現(xiàn)字符亂碼的情況,在這種情況下,首先要對字符亂碼問題定位:如對中文encoding問題的定位基本采用在認為有可能的程序處理后打印字符串的內(nèi)碼,這是最簡單的也是最直接的辦法。
四、JDBC與數(shù)據(jù)庫數(shù)據(jù)交換時的編輯問題
在JAVA運行期時,內(nèi)容交換的編碼為unicode編碼,JDBC接收到的字符流必須是合法的編碼格式,然后由JDBC向數(shù)據(jù)庫提交數(shù)據(jù)請求。
JSP/Servlet 編程中經(jīng)常出現(xiàn)編碼問題,除了上述討論的方面,另一方面是讀寫數(shù)據(jù)庫中的數(shù)據(jù)。
在目前的行業(yè)里經(jīng)常使用的關(guān)系數(shù)據(jù)庫的系統(tǒng)大多都支持數(shù)據(jù)庫多語言編碼,在創(chuàng)建數(shù)據(jù)庫時基本上都可以制定它自己的字符集設(shè)置,數(shù)據(jù)庫的數(shù)據(jù)就將以指定的編碼形式存儲。當應(yīng)用程序訪問數(shù)據(jù)時,在入口和出口處都會有encoding 轉(zhuǎn)換。對于中文數(shù)據(jù),數(shù)據(jù)庫字符編碼的設(shè)置應(yīng)當保證數(shù)據(jù)的完整性。GB2312、GBK、UTF-8、ISO-8859-1等都是可選的數(shù)據(jù)庫編碼。但是如果編碼設(shè)置成了ISO-8859-1,則應(yīng)用程序在寫數(shù)據(jù)之前須將16Bit的一個漢字或 Unicode 拆分成兩個8-bit的字符,讀數(shù)據(jù)之后則需將兩個字節(jié)合并起來,同時還要判別其中的SBCS字符。這種情況沒有充分利用數(shù)據(jù)庫編碼的作用,反而增加了編程的復(fù)雜度。因此ISO-8859-1不是推薦的數(shù)據(jù)庫編碼。針對上述狀況,下列代碼示例了如果Java應(yīng)用是基于GB18030編碼,而數(shù)據(jù)庫編碼是ISO-8859-1的情況,如何通過Java代碼轉(zhuǎn)換字符而不會產(chǎn)生亂碼。
五、客戶端與服務(wù)器之間的數(shù)據(jù)交換編碼問題
從browser到web server,我們可以在表單中指定出提交內(nèi)容的時候所用到的這些字符集,否則我們就會使用頁面指定的這些編碼。但是如果在url中直接用?的方式輸入?yún)?shù)的話,那么編碼往往會是操作系統(tǒng)本身的這些編碼,因為此時是和頁面無關(guān)緊要的。Web server它所接收到的是字節(jié)流的,默認是(getParameter)會以iso8859-1編碼處理,結(jié)果肯定是不對的,所以就需要進行處理解決。我們?nèi)绻崆霸O(shè)置了編碼(通過request. setCharacterEncoding ),那么就可以直接獲取到正確的結(jié)果。
參考文獻:
[1]周兵.Java Web開發(fā)中的中文亂碼問題分析及解決方[J].電腦知識與技術(shù),2014-10-15.
[2]楊金花.JSP技術(shù)中文亂碼的原因及解決方法[J].電子設(shè)計工程,2011-01-05.
[3]張瑋,文福安,李江濤.J2EE Web應(yīng)用中URL中文亂碼問題的研究[J].計算機時代,2008-10-02.
[4]朱明倫.管理技術(shù)在Web2.0應(yīng)用中的研究[J].上海師范大學,2006-04-01.
[5]鄒俊.基于Oracle數(shù)據(jù)庫系統(tǒng)性能調(diào)整與優(yōu)化研究[J].江西財經(jīng)大學,2006-10-01.
【W(wǎng)EB開發(fā)中不同情況下的亂碼處理方案】相關(guān)文章:
程序開發(fā)中異常的理解及處理異常03-20
利用PowerBuilder開發(fā)WEB應(yīng)用03-19
不同情況下病人的心理護理03-06
論利用ebXML和SOAP開發(fā)Web服務(wù)03-18
基于Web的多媒體CAI課件開發(fā)過程中若干問題的研究和實踐03-18
基于ASP技術(shù)開發(fā)Web數(shù)據(jù)庫檢索程序03-18
談不同體裁聲樂作品的藝術(shù)處理03-19