各字符集精簡總結(ASCII、ISO8859-1(Latin1)、GB2312、GBK、UNICIDE、UTF8)及亂碼處理

一、字符編碼

從左向右,字符集,更新,可表示的字符更多,通用性更高,一個字符所佔字節數更多(大體如此)
ASCII<ISO8859-1(Latin1)<GB2312<GBK<UNICIDE<UTF8

ASCII:單字節,最高位(第8位)爲0,不參與表示,後7位表示128個字符。內定義半角標點符號。僅夠英美用
ISO8859-1(Latin1):單字節,8位都參與表示字符,256個字符。僅夠歐美用。
GB2312:雙字節(每個字節大於127),內定義全角標點符號。ASCII中文擴展。基本夠中國使用
GBK:雙字節(無需每個字節大於127),增少數名族文字和繁體漢字。夠中國用
UNICODE:UCS-2,雙字節,最多組合表示65535個字符。夠全世界用
UTF-8:可變字節表示字符,字節範圍爲1~4。互聯網用

Unicode和Unicode(big endian)兩種:Unicode爲低位字節在後,高位字節在前。而Unicode(big endian)爲低位字節在
前,高位字節在後。

總結,使用unicode和utf-8可以表示世界範圍內所有字符。無需字符集轉換。

各操作系統 默認字符集合不統一,例如:windows簡體中文版 默認字符集合是ASCII和GB2312。
用字節相關變量保存漢字時,需要統一讀、寫雙方的漢字集合,否則就會出現亂碼!

讀寫數據庫時,也會經常出現亂碼問題,將讀出的數據轉換爲應用所用編碼,將寫入的數據轉換爲數據庫所用編碼即可。

數據庫中類型前有n的是Unicode。

二、亂碼問題

亂碼的本質是,寫字符的編碼與讀字符的編碼不一致導致的。

例如:windows默認下,編碼是ASCII和GB2312。讀取時,用UTF8,當然是亂碼。
html默認用utf-8寫,用Latin1讀取,也是亂碼

避免亂碼的處理建議:

1、統一寫字符的編碼和讀字符的編碼

2、若寫字符編碼與讀字符編碼無法一致,則讀取時,先將字符以寫字符編碼格式讀出來,然後進行編碼轉換,將轉換結果轉給需要讀取字符的接口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章