字符集和字符編碼的關系 :
字符集是書寫系統字母與符號的集合,為每一個「字符」分配一個唯一的 ID(學名為碼位 / 碼點 / Code Point);字符集種類較多,每個字符集包含的字符個數不同,常見的字符集名稱:ASCII字符集、GB2312字符集、GB18030字符集、UNICODE字符集等。
字符編碼則是將字符映射為一特定的字節或字節序列,是一種規則,將「碼位」轉換為字節序列的規則(編碼/解碼 可以理解為 加密/解密 的過程)。通常特定的字符集采用特定的編碼方式(即一種字符集對應一種字符編碼(例如:ASCII、IOS-8859-1、GB2312、GBK,都是即表示了字符集又表示了對應的字符編碼)),因此基本上可以將兩者視為同義詞。
Unicode和Unicode編碼:
Unicode是一個字符編碼的標准規范,而UTF-8/UTF-16/UTF-32只是對這個標准規范的具體實現,可稱為Unicode編碼。
Unicode 目前規划的總空間是17個平面(平面0至16,開頭是0x0-----0x10),0x0000 至 0x10FFFF。每個平面有 65536 個碼點。2字節:2^16=65536,4字節:2^32=4,294,967,296
0平面是2字節字符,1-16平面是4字節字符。
BMP 的字符是 Unicode 中最基礎和最常用的一部分,以 UTF-16 編碼時使用2字節,以 UTF-8 編碼時使用1至3字節。
超出 BMP(平面0) 的字符以 UTF-16 或 UTF-8 編碼都需要4字節。
另外還有一個比較少用的編碼形式,UTF-32,它編碼任何 Unicode 字符都需要4個字節。
17*65536 = 1,114,112,32位可容納下所有的碼點
由於目前unicode的表的大小可以算到如果使用utf-32編碼的話,用32個bit就能完全容納下所有的碼點,所以utf-32的特點是每一個字符編碼后都是4個字節,是定長的,相對的utf-8和utf-16都是變長的
1、ASCII碼 :128個字符。
特殊的:
0-9是48-57
A-Z 是65-90
a-z 是97-122
2、Unicode(UTF-16)
聯盟為每個字母中的每個柏拉圖字母分配了一個魔幻數字,其寫法如下:U + 0639。這個幻數稱為代碼點。
3、UTF-8
在UTF-8中,從0-127的每個代碼點都存儲在一個字節中【ASCALL碼】。實際上,只有代碼點128和更高的代碼點才使用2、3(最多6個字節)存儲。相比於只使用英文字母的美國人使用UTF-8比使用UTF-16減少一半內存。
傳統的“兩字節存儲”方法稱為UCS-2(因為它有兩個字節)或UTF-16(因為它有16位)
4、沒有純文本這樣的東西。
如果您在內存,文件或電子郵件中有字符串,則必須知道它的編碼格式,否則將無法解釋它或將其正確顯示給用戶。
5、亂碼
如果字符集和字符編碼兩者之間的轉換規則不統一標准,就會亂碼現象。簡單的說亂碼的出現是因為:編碼和解碼時用了不同或者不兼容的字符集。
字庫
字庫就是字型庫(FONT LIBRARY),其實計算機上顯示的每個字符(不管它是哪種語言的),都是一個小的圖案。字庫就是把這些小的圖案以圖片的某種形式保存起來,需要顯示的 時候還原出來就可以了。在WINDOWS操作系統里的字庫存放在系統盤windows/fonts文件夾下,在linux操作系統中字庫存放在這/usr /share/fonts/文件夾下。