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

學識都 人氣:2.96W

摘要:隨着時代的改變,現在人們與計算機已經是密不可分,信息技術的應用顯得異常重要。而在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