WEB開發中不同情況下的亂碼處理方案

才智咖 人氣:2.95W

摘要:隨著時代的改變,現在人們與計算機已經是密不可分,資訊技術的應用顯得異常重要。而在WEB系統開發中經常出現一些亂碼狀況,本文針對WEB開發中遇到的不同亂碼情況研究不同的處理方案。在整個B/S請求從客戶端頁面提交內容到伺服器,伺服器接收響應,並從資料庫中獲取資料,經過一番處理之後再返回給客戶端的瀏覽器頁面顯示的過程中,只要一個環節在轉碼過程中有錯誤就會導致亂碼的現象發生。在計算機系統上突然出現亂碼情況,需要先判斷亂碼的現象,要根據現象,查出資料在整個資料流向的過程中,資料到底從什麼時候什麼地方開始由正常開始變為亂碼,即找出資料變成亂碼的分界點。

WEB開發中不同情況下的亂碼處理方案

關鍵詞:WEB開發;處理方案;亂碼

引言

亂碼是應用系統執行中經常出現的一個問題,也是應用系統中非常突出而且必須解決的一個問題。由於引起出現亂碼的因素很多,例如:資料庫本身的亂碼,字元的亂碼,JDBC與資料庫資料交換時的編輯問題,所以解決亂碼問題比較複雜,本文針對這幾個亂碼問題提出了相應的解決方案。本文從編碼原理到實際案例對亂碼原因進行詳細的分析,並且整理和歸納了多個專案出現亂碼現象的解決經驗,總結了解決一般性亂碼的辦法和過程。針對我們遇到亂碼問題的經驗總結,同時,列出了不同環境下經常遇到過的亂碼問題的解決過程:

一、資料庫本身亂碼的解決方案

1.1 比如:Oracle資料庫在安裝的過程中就可以選擇某種字符集:ALTER DATABASE CHARACTER SET ZHS16GBK。

查詢當前字符集:select userenv('language') from dual;DB2在建立資料庫的時候可以指定字符集:create database sccrm using codeset UTF-8 territory CN。

MySQL在建立資料庫的時候可以指定字符集:create database testxxx default charset=UTF-8。

1.2 作業系統是否安裝相應的字符集(unix下可以用locale檢視當前字符集),將相應的資料打印出來即可。

1.3 Java程式是否存在轉碼錯誤,字符集經常是在UTF-8、GBK、ISO-8859-1之間轉換。

二、應用伺服器各個相關設定字符集的地方是否設定正確

找到分界點之後,針對分界點之前和之後,查詢在什麼地方可以設定字符集,每一個分界點可以在哪些地方設定相關的字符集。如果是程式,可以查詢到哪一行程式碼獲取資料的時候開始亂碼,從而可以考慮修改程式碼。如果不是程式,需要檢視當前應用有哪些地方可以設定字符集,並且要了解每個設定字符集的地方,他們之間的相互關係。

三、對字元亂碼問題定位的常用技巧

在網路系統中經常會出現字元亂碼的情況,在這種情況下,首先要對字元亂碼問題定位:如對中文encoding問題的定位基本採用在認為有可能的程式處理後列印字串的內碼,這是最簡單的也是最直接的辦法。

四、JDBC與資料庫資料交換時的編輯問題

在JAVA執行期時,內容交換的編碼為unicode編碼,JDBC接收到的字元流必須是合法的編碼格式,然後由JDBC向資料庫提交資料請求。

JSP/Servlet 程式設計中經常出現編碼問題,除了上述討論的方面,另一方面是讀寫資料庫中的資料。

在目前的行業裡經常使用的關係資料庫的系統大多都支援資料庫多語言編碼,在建立資料庫時基本上都可以制定它自己的字符集設定,資料庫的資料就將以指定的`編碼形式儲存。當應用程式訪問資料時,在入口和出口處都會有encoding 轉換。對於中文資料,資料庫字元編碼的設定應當保證資料的完整性。GB2312、GBK、UTF-8、ISO-8859-1等都是可選的資料庫編碼。但是如果編碼設定成了ISO-8859-1,則應用程式在寫資料之前須將16Bit的一個漢字或 Unicode 拆分成兩個8-bit的字元,讀資料之後則需將兩個位元組合併起來,同時還要判別其中的SBCS字元。這種情況沒有充分利用資料庫編碼的作用,反而增加了程式設計的複雜度。因此ISO-8859-1不是推薦的資料庫編碼。針對上述狀況,下列程式碼示例瞭如果Java應用是基於GB18030編碼,而資料庫編碼是ISO-8859-1的情況,如何通過Java程式碼轉換字元而不會產生亂碼。

五、客戶端與伺服器之間的資料交換編碼問題

從browser到web server,我們可以在表單中指定出提交內容的時候所用到的這些字符集,否則我們就會使用頁面指定的這些編碼。但是如果在url中直接用?的方式輸入引數的話,那麼編碼往往會是作業系統本身的這些編碼,因為此時是和頁面無關緊要的。Web server它所接收到的是位元組流的,預設是(getParameter)會以iso8859-1編碼處理,結果肯定是不對的,所以就需要進行處理解決。我們如果提前設定了編碼(通過request. setCharacterEncoding ),那麼就可以直接獲取到正確的結果。

參考文獻:

[1]周兵 Web開發中的中文亂碼問題分析及解決方[J].電腦知識與技術,2014-10-15.

[2]楊金花技術中文亂碼的原因及解決方法[J].電子設計工程,2011-01-05.

[3]張瑋,文福安,李江濤.J2EE Web應用中URL中文亂碼問題的研究[J].計算機時代,2008-10-02.

[4]朱明倫.管理技術在Web2.0應用中的研究[J].上海師範大學,2006-04-01.

[5]鄒俊.基於Oracle資料庫系統性能調整與優化研究[J].江西財經大學,2006-10-01.

TAGS:方案 亂碼 Web