有關於tomcat的亂碼問題

2021-06-28 07:40:07 字數 1405 閱讀 2171

這幾天專案中涉及到了編碼問題,收到的請求中出現中文亂碼現象。應為我們的專案中用的是

utf-8

編碼格式,而對方起請求我們的時候用的是gbk編碼,我們在本機eclipse中執行,修改了編碼方式,先以gbk方式解碼,然後再回去請求字段,此時中文字段不再是亂碼,可是放到了線上,收到的請求仍然是亂碼,這是問題就出現了,本地能夠正常執行,線上卻仍然是亂碼。那問題又在那呢?會不會是已經存在的過濾器的影響呢?隨後我們又新增了過濾器,

字符集設定為gbk,在本地執行,進入過濾器後,先採用iso-8859-1編碼(因為tomcat預設採用此編碼方式進行編碼),然後再採用gbk編碼,可以獲得正確的中文字段。隨後再放到線上,亂碼問題還是存在,這就傷腦筋了,真正的問題出現在哪了呢?這個時候再到線上的tomcat配置檔案conf/server.xml中一看,哭了,線上的tomcat和我們本地的配置不一樣,線上的設定了uriencoding="utf-8",這樣一來tomcat就會以

utf-8編碼來處理get請求了,而本地種沒有設定這個字段,則是已tomcat預設編碼iso-8859-1來進行處理,這個時候只要把線上的

uriencoding="utf-8"設定刪除就可以了。

解決了乙個問題就來了另乙個問題。因為專案中的所有jsp頁面的預設編碼方式都是

utf-8,如果把tomcat的編碼方式從

utf-8改為原來預設的

iso-8859-1,再遇到專案本地get請求的時候,如果請求中存在中文字元,這就會出現中文亂碼,相對來說解決這個問題就方便多了,至少我們知道了問題出現在了**了。     

(1)、我們可以把請求中出現中文的jsp請求改為post,這樣在過濾器中會進行

utf-8編碼。

(2)、我們可以在controller中直接把接受到的請求先以iso-8859-1,編碼,再進行

utf-8編碼復原中文字元,即 

checksearch

=new

string(

checksearch

.getbytes(

"iso-8859-1"

),"utf-8"

)。這兩個可以是情況而用。至此編碼問題解決完畢。

到這裡還有乙個問題需要注意,在我們自動解壓的tomcat中,預設編碼是iso-8859-1,而有些系統如linux自帶的tomcat中,存在urienciding的字元設定,這個需要提醒一下大家。

最後總結一下我自己學習到關於專案中編碼的使用。

(1)、

tomcat的uriencoding預設是iso-8859-1,可以根據專案需求來進行設定編碼方式,配合controller,解決包含中文請求以get方式提交有可能出現的亂碼問題。

(2)、

新增過濾器,

設定編碼為utf-8,解決請求以post方式提交的亂碼問題。

參考資料:

關於tomcat的亂碼問題。

之前總結過所有亂碼的四種可能性以及解決方案。今天遇到了乙個特別的問題。嘿嘿。現象 使用get方式在url中傳遞引數,後台使用request.getparameter 獲取引數的時候出現亂碼。各種情況都嘗試過了。發現是iso8859 1的問題。使用request.getquerystring 並且擷取...

關於亂碼的問題 Tomcat的編碼修改

遇到的問題 程式需要傳送http get請求到伺服器,請求的引數中包含了中文字元。程式中引數為utf 8格式,且經過了utf 8 url編碼再傳送。使用的tomcat伺服器,但伺服器端後台程式中取到的引數的中文是亂碼。問題原因 經過分析,應該是tomcat在解析引數的時候沒有使用正確的編碼格式 ut...

有關mysql的亂碼問題

今天在做web專案時,發現在插入資料庫時出現了中文的亂碼問題,在網上找了一大堆,無非就是乙個問題,那就是資料庫的編碼設定有問題,在這裡僅僅只是講一下方法是怎麼做的 1.在mysql中使用show variables like char 命令檢視mysql的編碼格式,如果不是utf 8格式就全部都換成...