什么是字符集
在介紹字符集之前,我們先了解下為什么要有字符集。我們在計算機屏幕上看到的是實體化的文字,而在計算機存儲介質中存放的實際是二進制的比特流。那么在這兩者之間的轉換規則就需要一個統一的標準,否則把我們的U盤插到老板的電腦上,文檔就亂碼了;小伙伴QQ上傳過來的文件,在我們本地打開又亂碼了。于是為了實現轉換標準,各種字符集標準就出現了。簡單的說字符集就規定了某個文字對應的二進制數字存放方式(編碼)和某串二進制數值代表了哪個文字(解碼)的轉換關系。
那么為什么會有那么多字符集標準呢?這個問題實際非常容易回答。問問自己為什么我們的插頭拿到英國就不能用了呢?為什么顯示器同時有DVI,VGA,HDMI,DP這么多接口呢?很多規范和標準在最初制定時并不會意識到這將會是以后全球普適的準則,或者處于組織本身利益就想從本質上區別于現有標準。于是,就產生了那么多具有相同效果但又不相互兼容的標準了。
說了那么多我們來看一個實際例子,下面就是屌這個字在各種編碼下的十六進制和二進制編碼結果,怎么樣有沒有一種很屌的感覺?
字符集 | 16進制編碼 | 對應的二進制數據 |
---|---|---|
UTF-8 | 0xE5B18C | 1110 0101 1011 0001 1000 1100 |
UTF-16 | 0x5C4C | 1011 1000 1001 1000 |
GBK | 0x8CC5 | 1000 1100 1100 0101 |
引言
我們在程序編寫的過程中總是會遇到一些中文編碼的問題,需要在程序中很多環節中去進行過濾和轉義,依舊有可能遇到中文亂碼的問題,下面是我的一個同事告訴我的方法,百時不靈,當然是針對于tomcat服務器來說的。
此外,這個方法并不會對之前的那些方法造成沖突。
服務器/conf目錄/server.xml文件
將相關語句改為:
1
2
3
|
< Connector port = "8008" protocol = "HTTP/1.1" connectionTimeout = "20000" redirectPort = "8443" URIEncoding = "UTF-8" /> |
之前的語句沒有URIEncoding="UTF-8"
這一句
有朋友問了一個問題:這個方法好像只針對get請求有效,對于POST請求需要怎么解決呢?除了req.setCharacterEncoding("UTF-8");
這個方法之外?
其實亂碼問題需要整個系統統籌規劃的。從你的數據庫設計,后臺字符過濾,前臺數據傳遞。單純使用 req.set
并不總會奏效。
所以,你如果是post提交,第一檢查數據庫格式是不是utf8的,第二,post提交form表單有沒有設置utf8
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。
原文鏈接:http://blog.csdn.net/bestcxx/article/details/51271462