編碼方式對於程式的重要不言而喻,若是不能徹底理解編碼方式,則在許多的地方都會困擾著你。
對於編碼方式的困擾,在剛學習jsp時出現的亂碼問題到現在一年有餘,一直在模糊狀態,如今,也不知道是不是真的徹底明白,只是有一點小小的收穫,期待以後的徹底理解,在此先記錄一下點點滴滴。
從開始的亂碼起。
首先是jsp中的亂碼,首先說明jsp中設定編碼方式的地方,在page標籤中的pageencoding是對於jsp編譯為servlet後採取的編碼方式,在contenttype設定時是在web伺服器響應到瀏覽器時告知瀏覽器響應頭,採取的編碼方式,以便瀏覽器能正確解讀html檔案,在response中的setcharacterencoding也是web伺服器告知瀏覽器,檔案所採取的編碼方式,這其中有個優先順序,reponse>contenttype,而在html中也有meta標籤來用來響應瀏覽器器中的編碼方式,在jsp中的設定,是優先於html中的meta編碼方式的設定。
設定的問題解決了,然後就是明白其中的原理,首先b/s結構中的資訊傳遞是用二進位制來傳遞的,因為我們傳遞的是字串,這便要把字串來轉換為響應的二進位制,我們知道,在不同的編碼方式,對應得二進位制資訊是不同的,編碼方式多種多樣,iso-8859-1,unicode,utf-8,gbk,在中文的方式中可用unicode,utf-8,gbk但一般的用gbk,因為gbk是專門的為中文字元建立的,不是說其他的不好,而是unicode是專注於全世界的平台開發的,而utf-8是利用可變長度的位元組來表示字串,雖然utf-8表示中文字元很好,但是gbk畢竟是中文官方的嗎,其實用utf-8更好,若是中文字元中包含有英文本元,也推薦使用。
一般的程式對於編輯的內容都有採用相應的編碼方式,比如在myeclipse中對於jsp的編輯預設是採用iso-8859-1來編輯的,而記事本預設是採用ansi編輯的(當然也可通過另存為來設定編碼方式),瀏覽器器也是程式編寫的,因此它也有響應的編碼方式的。編碼方式解決後便是解碼問題,因為不同的編碼方式問題,同一二進位制資訊便有了好多種不同的對應於編碼字符集的表現形式,所以要知道之前的編碼方式,才能通過正確的解碼方式來解碼顯示正確的字元,這裡只是討論利用jsp網頁開發,所以只是用此表示編碼方式,其他大同小異,首先要表明流程,在瀏覽器與伺服器互動的過程中首先是通過傳送位址,即url,而不同的瀏覽器採用的是不同的url encode的,中文的瀏覽器一般採用gbk,而若是修改了瀏覽器的編碼方式也是可以的,在內部利用的是http協議,這個協議要求傳遞的資訊分四部分,一請求行,二請求頭標,三換行便是結束頭標資訊,四是請求的引數資訊,請求行包括的是相應的提交方式,然後是提交的位址,然後是協議的版本,而請求頭標是包括瀏覽器的資訊,此種有瀏覽器所能識別的mime型別,瀏覽器的版本等等,最後便是請求的引數資訊,若是採用的get請求方式的,提交的資訊是在url的後邊通過鍵值對來表示,若是post則採用的是在最後一部分的請求的引數資訊地方。到達伺服器端是,web伺服器便採取對應的編碼方式來解碼資訊,以tomcat為例,若是在url ,get此種提交方式的時候是以預設的iso-8859-1來進行編碼的,若是含有非iso-8859-1的字元便會出現亂碼,解決辦法有,在tomcat中的server.xml檔案中connector寫入uriencoding="編碼字符集"使用usebodyrequestforuri=true,其中的區別是第乙個是對應於所有的web伺服器下的get url請求的資訊都採用設定的編碼方式來編碼,而後者是在每次請求的資訊內部進行重新編碼(解碼),只是乙個頁面,而不是像第一種方式的對應於所有的頁面都進行編碼,在此還要利用new string(request.getparameter("").getbytes("iso-8859-1"),"編碼方式");重編寫。若是採用post方式提交的話,便只在第一次讀取引數資訊的時候設定一下編碼方式即可(request.setcharacterencoding(''));若是厭惡了每次的請求都要寫上request.setcharac....時可以通過過濾器來設定便可
mysql 修改編碼方式 Mysql編碼方式修改
mysql編碼方式修改 使用mysql插入中文亂碼 mysql select name from info name 1 row in set 0.00 sec mysql 1.修改配置檔案的方式修改 找到mysql下的my.conf 1.在 mysqld 下新增 character set ser...
python編碼方式
檢視編碼方式 import chardet print chardet.detect str str為string 位元組序 若寫入時以mode a encoding utf 16 方式執行,則會在內容寫入前新增標誌 xff xfe 若以 mode wb encoding utf 16 方式執行,則...
幾種編碼方式
一直以來,對於幾種編碼方式我一直很困惑,弄不清它們之間的關係,最近在學習hadoop裡的text類時又涉及到了編碼的問題,因此我索性抽點時間來簡單研究一下幾種編碼,下面是我的簡要總結。計算機裡,所有的資訊最終是以二進位制的0或1來進行儲存的,同樣的,在計算機裡,字元最終也是要用0和1來進行儲存,那麼...