tomcat亂碼原因:在學習servlet時候,經常會遇到中文亂碼的問題,網上查只知道如何設定不亂碼,其中的原理不是很明白。我認為明白其中的原理,亂碼問題就很容易解決
tomcat亂碼解決方法:
post請求:
request.setcharacterencoding("utf-8");
如果不想每個請求方法裡都寫就寫乙個filter過濾器
get請求:
1.修改tomcat中的server.xml檔案
/>
2.獲得引數是通過new string()方法
string name = request.getparameter("name");
name = new string(name.getbytes("iso-8859-1"),"utf-8");
問題:tomcat對於get請求使用了iso-8859-1編碼,對post請求預設使用你設定的編碼,沒有設定就使用預設iso-8859-1編碼。
對post請求設定編碼就不會亂碼,原理是使用utf-8編碼,使用utf-8解碼,不使用utf-8解碼就會出錯如下:
string s = new string("你好".getbytes(),"utf-8");system.out.println(
new string(s.getbytes(),"iso-8859-1"));
string s1 = new string(s.getbytes(),"utf-8");
system.out.println(s1);
結果:ä½ å¥½
你好get請求瀏覽器的編碼為utf-8,然而tomcat使用iso-8859-1進行解碼就會亂碼,為什麼這樣可以解決亂碼,
是因為iso-8859-1編碼是單位元組編碼,所以使用s1.getbytes("iso-8859-1")得到的直接陣列和之前沒有被解碼時一樣,
所以在使用utf-8就和上面的post一樣,只是編碼,解碼
並不是所有的亂碼都可以使用這種方式,只是因為iso-8859-1編碼是單位元組編碼,獲得其位元組陣列是沒有變的,
因為不同的編碼對應的位元組數是不一樣的
string s = new string("你好".getbytes(),"utf-8");system.out.println(arrays.tostring(s.getbytes()));
//相當於tomcat幫助解碼(實際對於開發者又編碼一次,所以後面要先獲得iso-8859-1編碼的位元組陣列,再轉成utf-8編碼)
string s1 = new string(s.getbytes(),"iso-8859-1");
//列印iso-8859-1編碼的位元組資料,與解碼前的位元組陣列比較,發現一樣,所以以utf-8編碼解碼不會亂碼
system.out.println(arrays.tostring(s1.getbytes("iso-8859-1")));
string s2 = new string(s1.getbytes("iso-8859-1"),"utf-8");
system.out.println(s2);
結果:[-28, -67, -96, -27, -91, -67]
[-28, -67, -96, -27, -91, -67]
你好
解決tomcat編碼後亂碼問題
很多時候我們程式的中文經過tomcat編碼後會出現亂碼問題 開啟tomcat的conf server.xml檔案找到如下 在最後加上 uriencoding utf 8 因為tomcat處理get請求時預設是採用ios 8859 1的編碼格式編碼 如果你專案是用utf 8,在get請求,或者表單 頁...
關於亂碼的問題 Tomcat的編碼修改
遇到的問題 程式需要傳送http get請求到伺服器,請求的引數中包含了中文字元。程式中引數為utf 8格式,且經過了utf 8 url編碼再傳送。使用的tomcat伺服器,但伺服器端後台程式中取到的引數的中文是亂碼。問題原因 經過分析,應該是tomcat在解析引數的時候沒有使用正確的編碼格式 ut...
修改tomcat編碼格式 解決亂碼問題
修改tomcat預設編碼格式 修改tomcat下的conf server.xml檔案,找到如下 connectiontimeout 20000 redirectport 8443 這段 規定了tomcat監聽http請求的埠號等資訊。可以在這裡新增乙個屬性 uriencoding,將該屬性值設定為u...