常見字符集&亂碼問題

字符集

經常使用字符集分類

ASCII及其擴展字符集

做用:表語英語及西歐語言。java

位數:ASCII是用7位表示的,能表示128個字符;其擴展使用8位表示,表示256個字符。web

範圍:ASCII從00到7F,擴展從00到FF。編碼

ISO-8859-1字符集

做用:擴展ASCII,表示西歐、希臘語等。spa

位數:8位, 範圍:從00到FF,兼容ASCII字符集。翻譯

GB2312字符集

做用:國家簡體中文字符集,兼容ASCII。orm

位數:使用2個字節表示,能表示7445個符號,包括6763個漢字,幾乎覆蓋全部高頻率漢字。blog

範圍:高字節從A1到F7, 低字節從A1到FE。將高字節和低字節分別加上0XA0便可獲得編碼。utf-8

GBK字符集

做用:它是GB2312的擴展,加入對繁體字的支持,兼容GB2312。ci

位數:使用2個字節表示,可表示21886個字符。字符串

範圍:高字節從81到FE,低字節從40到FE。

UNICODE字符集

做用:爲世界650種語言進行統一編碼,兼容ISO-8859-1。

位數:UNICODE字符集有多個編碼方式,分別是UTF-8,UTF-16和UTF-32。

BIG5字符集

做用:統一繁體字編碼。

位數:使用2個字節表示,表示13053個漢字。

範圍:高字節從A1到F9,低字節從40到7E,A1到FE。

GB18030字符集

做用:它解決了中文、日文、朝鮮語等的編碼,兼容GBK。

位數:它採用變字節表示(1 ASCII,2,4字節)。可表示27484個文字。

範圍:1字節從00到7F; 2字節高字節從81到FE,低字節從40到7E和80到FE;4字節第一三字節從81到FE,第二四字節從30到39。

UCS字符集

做用:國際標準 ISO 10646 定義了通用字符集 (Universal Character Set)。它是與UNICODE同類的組織,UCS-2和UNICODE兼容。

位數:它有UCS-2和UCS-4兩種格式,分別是2字節和4字節。

範圍:目前,UCS-4只是在UCS-2前面加了0x0000。

按所表示的文字分類

語言 字符集  正式名稱
英語、西歐語ASCII ISO-8859-1 MBCS 多字節
簡體中文 GB2312 MBCS 多字節
繁體中文 BIG5 MBCS 多字節
簡繁中文 GBK MBCS 多字節
中文、日文及朝鮮語 GB18030 MBCS 多字節
各國語言 UNICODE,UCS DBCS 寬字節

 

編碼間的轉換:

要求:要知道當前內容的編碼格式和要轉換爲的編碼格式:

示例:

String username = request.getParameter("username").trim(); 
String password = request.getParameter("password").trim();

獲取到的String類型變量:username和password的編碼格式爲:ISO-8859-1   

如何將他們轉換成UTF-8編碼,不要出現亂碼,代碼以下:

String parameter = request.getParameter("username"); 
//獲取到參數對應的二進制數 
byte[] temp = parameter.getBytes("iso-8859-1"); 
//經過對應的二進制數 手動編碼成utf-8的字符串 
String param = new String(temp, "utf-8");

 原理:

    相同的內容在計算機中的二進制編碼是同樣的,因此在不一樣編碼間內容傳遞時,要想不出現亂碼,先將該內容按其原編碼轉換爲二進制序列。而後再將這個二進制序列按照要轉換的編碼進行翻譯,就不會出現亂碼。

 

出現的亂碼形式的含義:

??????    --->    表明字符編碼不匹配形成

师龙       --->    表明沒有該編碼方式

相關文章
相關標籤/搜索