開發中的亂碼問題
下面總結一下這些常用編碼的概念,很多初級程序員只知道這些是一種編碼,但不知道真正的作用。
ASCLL:這種編碼計算機專業的都學過,是一種英文編碼規則,如果是英語系統用這種編碼就夠了。
單字節,最多能表達256種字符。
ISO8859-(1-15):它是對ASCLL編碼的擴展 所以也是單字節的。ISO(國際標準組織)不把中文當回事,
很多小國家的文字都擴展了如:冰島語之類的,就是不擴展中文。其實不是歧視,而已是那些國家的
文字都是由一串字母組成的,比較相似,編碼規則一樣。如果中文全部用拼音來表達的話,那就不用出現後面的中文編碼了。
GB2312:中國人終於站起來了,我們自己也搞了一套編碼規則。不過只有簡體。采用雙字節(具體原理百度一下這裏就講太多了)。
GBK:GB2312還是不夠用,擴展一下吧。繁體也進來吧!一家人。
unicode:統一字符編碼標準集,把上面所有的都包括進來。采用雙字節,沒辦法,因為中文是雙字節的,只能預留多點。
urt-8:中文就是麻煩,浪費了很多空間,英文用1個字節就可以了,就一定用2個字節。根據特點自己分配空間。有些字符還會出現三個字符。
系統中能所有顯示的字符,都會根據系統字體集中的編碼來解碼現實,如何沒有的話,就會出現亂碼。
如:如果你的系統是英文系統,而英文系統裏沒有中文的編碼的話,就會出現亂碼。
重點來了:做WEB開發的話,必須知道,web容器,IE,POST/GET,java/C#或其他語言,JDBC,它們都是用什麽編碼的。
IE可以自由選擇編碼。
java/C#:unicode
web容器:ISO8859-1.
JDBC:ISO8859-1.
POST/GET:ISO8859-1,但可以在獲取GET/POST傳過來的數據之前,就先對request過來的數據進行轉碼。
當然也可以在服務器每次響應瀏覽器時,就設置好瀏覽器GET/POST過來的編碼,response.setcontenttype("text/html;charset=GBK");
發開中經常會出現?亂碼:unicode轉其他編碼時,如果沒有對應的編碼,就會出現?
而反過來其他編碼轉unicode,就會出現?0xfffd.
開發中的亂碼問題