字符編碼其實沒有幾種,它只是一個標準,可是若是沒有特別的去了解過的話,也是很容易被搞糊塗的。html
今日隨意翻了一下,稍微瞭解了一點,隧記錄下來。瀏覽器
#1 現代瀏覽器默認的字符集是 ISO-8859-1,若是不是則須要在 <meta> 部分進行指定。google
#2 Unicode 標準:涵蓋了世界上全部的字符、標點和符號。編碼
#3 Unicode 的應用範圍: XML、Java、ECMAScript(JavaScript)、LDAP、CORBA3.0、WML。spa
#4 UTF-8 和 UTF-16是Unicode 的一種轉換形式。操作系統
UTF-8 字符能夠是1-4個字節,向後兼容ASC-II, UTF-16 佔2個字節的可變字符編碼。用於OS以及一些字節碼。.net
#5 通常操做系統會使用默認的ANSI的編碼,在中文操做系統中通常使用GB.. code
ANSI的致命缺陷是: 每一個標準之間都存在着編碼重疊的問題。htm
#6 MBCS:Muti – Byte Chactacter System (Set)blog
多字節字符系統或字符集。須要幾個字節就存放幾個字節。C語言默認的是MBCS格式。
#7 Universal Code : 實際上須要3個字節,考慮到便利性,理論上用4個。
#8 UTF-8 的轉換方式
互聯網的普及,強烈要求出現一種統一的編碼方式。UTF-8就是在互聯網上使用最廣的一種Unicode的實現方式。其餘實現方式還包括UTF-16(字符用兩個字節或四個字節表示)和UTF-32(字符用四個字節表示),不過在互聯網上基本不用。重複一遍,這裏的關係是,UTF-8是Unicode的實現方式之一。
UTF-8最大的一個特色,就是它是一種變長的編碼方式。它可使用1~4個字節表示一個符號,根據不一樣的符號而變化字節長度。
UTF-8的編碼規則很簡單,只有二條:
1)對於單字節的符號,字節的第一位設爲0,後面7位爲這個符號的unicode碼。所以對於英語字母,UTF-8編碼和ASCII碼是相同的。
2)對於n字節的符號(n>1),第一個字節的前n位都設爲1,第n+1位設爲0,後面字節的前兩位一概設爲10。剩下的沒有說起的二進制位,所有爲這個符號的unicode碼。
下表總結了編碼規則,字母x表示可用編碼的位。
Unicode符號範圍 | UTF-8編碼方式 (十六進制) | (二進制) --------------------+--------------------------------------------- 0000 0000-0000 007F | 0xxxxxxx 0000 0080-0000 07FF | 110xxxxx 10xxxxxx 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
跟據上表,解讀UTF-8編碼很是簡單。若是一個字節的第一位是0,則這個字節單獨就是一個字符;若是第一位是1,則連續有多少個1,就表示當前字符佔用多少個字節。
#9 實例:
下面,舉一個實例。
打開"記事本"程序Notepad.exe,新建一個文本文件,內容就是一個"嚴"字,依次採用ANSI,Unicode,Unicode big endian 和 UTF-8編碼方式保存。
而後,用文本編輯軟件UltraEdit中的"十六進制功能",觀察該文件的內部編碼方式。
1)ANSI:文件的編碼就是兩個字節"D1 CF",這正是"嚴"的GB2312編碼,這也暗示GB2312是採用大頭方式存儲的。
2)Unicode:編碼是四個字節"FF FE 25 4E",其中"FF FE"代表是小頭方式存儲,真正的編碼是4E25。
3)Unicode big endian:編碼是四個字節"FE FF 4E 25",其中"FE FF"代表是大頭方式存儲。
4)UTF-8:編碼是六個字節"EF BB BF E4 B8 A5",前三個字節"EF BB BF"表示這是UTF-8編碼,後三個"E4B8A5"就是"嚴"的具體編碼,它的存儲順序與編碼順序是一致的。
參考鏈接:
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html