字符集
常用字符集分類
ASCII及其擴展字符集
作用:表語英語及西歐語言。
位數:ASCII是用7位表示的,能表示128個字符;其擴展使用8位表示,表示256個字符。
范圍:ASCII從00到7F,擴展從00到FF。
ISO-8859-1字符集
作用:擴展ASCII,表示西歐、希臘語等。
位數:8位, 范圍:從00到FF,兼容ASCII字符集。
GB2312字符集
作用:國家簡體中文字符集,兼容ASCII。
位數:使用2個字節表示,能表示7445個符號,包括6763個漢字,幾乎覆蓋所有高頻率漢字。
范圍:高字節從A1到F7, 低字節從A1到FE。將高字節和低字節分別加上0XA0即可得到編碼。
GBK字符集
作用:它是GB2312的擴展,加入對繁體字的支持,兼容GB2312。
位數:使用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");
原理:
相同的內容在計算機中的二進制編碼是一樣的,所以在不同編碼間內容傳遞時,要想不出現亂碼,先將該內容按其原編碼轉換為二進制序列。然后再將這個二進制序列按照要轉換的編碼進行翻譯,就不會出現亂碼。
出現的亂碼形式的含義:
?????? ---> 代表字符編碼不匹配造成
å¸é¾ ---> 代表沒有該編碼方式
