讓人抓狂的編碼問題

經過get方式提交的數據,須要在tomcat的 server.xml文件裏設置URLEncoding =」utf-8」配置。
經過post方式提交的數據,須要在 request.getParameter()以前,調用 request.setCharacterEncoding(「utf-8」)

Response內容的編碼,則能夠
經過 response.setCharacterEncoding(「utf-8」).
或者設置contextType時同時設置編碼
Response.setContentType(「 text.html, utf-8」)


編碼和解碼
把字符轉換成0 1這樣的二進制碼 即編碼。相反即解碼。
通常不用二進制表示字符的編碼(寫起來,閱讀都不方便),通常用十六進制表示。
所以字符《----》十六進制之間的映射的集合,即爲字符集。

經常使用字符集 unicode(utf-16),gb2312,gb18030,gbk,utf-8,iso-8859-1 ,Big-5.

Unicode和utf-8能支持世界上全部語言的字符
Gb2312是舊的國家標準,不支持繁體中文
Gb18030是新的國家標準,支持繁體中文
Gbk不是國家標準,但支持繁體中文
Big-5支持繁體

Iso-8859-1不支持中文,英美等拉丁國家經常使用這個編碼

注:若是你拿到一個字節流,須要清楚的知道,這個字節流是用什麼字符集進行的編碼,
經常使用開源工具:chardet,能夠猜想一段字節流是什麼編碼。

若是你拿到一個字符串,發現輸出的是亂碼,那可否經過某種技術手段解決這個亂碼問題,答案是不必定。
1)若是是按照iso-8859-1字符集對字節流解碼獲得的字符串,則能夠獲得正確的字符串,方法:getBytes(「iso-8859-1」)獲得字節流,而後把字節流new String(byte[],」正確的字符集」)轉換成正確的字符串。
2)不過不是按照iso-8859-1字符集對字節流解碼的,很大可能沒有辦法正確還原了。
 

關於請求和響應的編碼問題 html

經過get方式向後臺請求 瀏覽器

若是在某頁面點擊連接(連接附帶中文),瀏覽器會自動根據這個頁面使用的字符集對漢子編碼,傳到服務器 tomcat

Get請求不能用request.setCharacterEncoding(),get請求的編碼是有應用服務器決定的,對於get請求 tomcat設置。 服務器

Post請求用request.setCharacterEncoding(「」)指定客戶端傳到服務器的編碼,能夠在filter裏設置,而不用在每一個servlet裏設置 工具

小貼士:不一樣編碼下的字符串佔的字節數: 英文字母:A 字節數:1;編碼:GB2312 字節數:1;編碼:GBK 字節數:1;編碼:GB18030 字節數:1;編碼:ISO-8859-1 字節數:1;編碼:UTF-8 字節數:4;編碼:UTF-16 中文漢字:人 字節數:2;編碼:GB2312 字節數:2;編碼:GBK 字節數:2;編碼:GB18030 字節數:1;編碼:ISO-8859-1 字節數:3;編碼:UTF-8 字節數:4;編碼:UTF-16
相關文章
相關標籤/搜索