編碼:
編碼:字串變為位元組;解碼:位元組變為字串
瀏覽器:一般是gbk解碼[瀏覽器收到伺服器的響應後將伺服器編碼的位元組碼解碼為字串顯示在瀏覽器上。]
1. 請求編碼
客戶端傳送的資料編碼:由瀏覽器來決定:
1). 如果是在位址列中直接給出url,那麼一般都是預設為gbk,但這個可能不太大。
2). 如果是通過頁面上的表單或超連結發出請求,那麼由當前頁面的編碼來決定傳送的引數的編碼。
無論瀏覽器傳送過來的是什麼編碼的資料,tomcat都預設使用iso-8859-1來編碼
1). post:可以使用request.setcharacterencoding()方法來設定請求體資料的編碼,因為post請求引數在請求體中,所以是可以設定編碼的。在使用request.getparameter()方法獲取引數之前,先使用request.setcharacterencoding()方法來設定編碼即可。
2). get:沒有方法可以設定它,因為引數在url中。所以使用request.getparameter()獲取到的資料一定是錯誤的使用了iso-8859-1解碼的。可以再使用iso-8859-1把字串轉回到byte,再重新使用正確的編碼來解碼即可。
string s = request.getparameter("s");//使用iso-8859-1錯誤的解碼了
byte bytes = s.getbytes("iso-8859-1");//退回錯誤的編碼,讓字串通過iso-8859-1返回到位元組資料,即還原位元組資料
s = new string(bytes, "utf-8");//重新使用正確的utf-8來解碼。
響應亂碼解決:
response.setcharacterenconding(「utf-8」):設定伺服器響應給瀏覽器的資料是以utf-8編碼的。而不能通知瀏覽器以什麼樣的編碼來解析響應的資料。
response.setheader(「content-type」,」text/html;charset=utf-8」): content-type它的作用是通知瀏覽器響應資料的mimetype型別,並通知瀏覽器響應資料的編碼以及以什麼樣的編碼來解析資料;
response.setcontenttype(「text/html;charset=utf-8」);【這兩句作用相同】
request:
請求亂碼解決:
在瀏覽器輸入資料時,瀏覽器會對輸入的資料進行編碼(utf-8)。
request物件是由伺服器建立的,伺服器將瀏覽器傳遞的引數封裝到request物件時會對瀏覽器編碼的資料進行解碼(iso8859-1)後然後再封裝到request物件中。
請求引數亂碼解決:
1)、先將瀏覽器編碼的資料用伺服器碼表進行重新編碼,然後再用伺服器與瀏覽器對應的碼表進行解碼【因為tomcat8以下的都是預設的iso8859-1碼解碼的】。
string name = reuqest.getparameter(name);
name = new string(name.getbytes(「iso8859-1」,」utf-8」));
2)、簡潔寫法:只對post請求有效
request.setcharacterencoding(「utf-8」);
關於get/post請求引數格式:
get請求的引數是在請求行中資源路徑後:
/webcontext/***?time=new date()&password=11;
post:請求引數是在請求正文中
username=tom&password=111;
cookie中不允許有中文,如果要儲存中文,需要用url編碼:
儲存cookie:
string name = urlencoder.encode("姓名", "utf-8");
string value = urlencoder.encode("張三", "utf-8");
獲取cookie:
string name = urldecoder.decode(c.getname(), "utf-8");
string value = urldecoder.decode(c.getvalue(), "utf-8");
關於java web中字元編碼和url編碼的理解
首先要區分字元編碼和 url編碼的區別,page 指令中指定的字元編碼是儲存頁面的時使用的編碼,url編碼是傳輸請求引數時候使用的編碼。字元編碼 web頁面本身的 page 指令中 content type text html charset gbk 指定的是生成頁面 即響應頁面也就是本頁面 的字元...
java web 路徑問題
路徑問題 專案開發用絕對路徑 生產環境是絕對路徑 因為相對路徑很難找 相對的參照物無法固定 1 表示是根路徑。一是伺服器根路徑 二是web 應用根路徑 即專案名 在 tomcat 中發布的專案就是 webroot 裡的內容 在位址列中輸入 會訪問這個伺服器下預設訪問檔案 預設值 相當於選中檔案,回車...
java web 中亂碼問題
string name new string request.getparameter username getbytes iso 8859 1 gbk 這樣的接受引數的方法是乙個通用的方法,不管是對get或post提交的方法都有效 一 中文亂碼產生的原因 a 亂碼有很多種,這裡所說的是指web傳入...