tomcat亂碼原因 基本的編碼問題

2022-09-07 02:21:10 字數 1641 閱讀 5484

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...