從ord()中對Unicode編碼的理解

剛開始學習編程的時候,老對字符串編碼的理解模模糊糊。也一直看這方便的資料,今天在看Dive in python時,忽然有了新的理解(不知道是否正確)。python

Python有個built-in函數ord(),返回一個字符的unicode值。這個函數並無其餘參數,那就是說,給定一個字符,就會有一個特定值對應。跟具體編碼(utf-8,utf-16,gb2312)無關。編程

我以前錯誤的理解是:每套編碼都有本身的對應表。網絡

如今看來,unicode標準囊括了世界上全部的字符,每一個字符都有對應的unicode值。函數

 

我所謂的編碼,好比utf8, utf16, gb2312等等,其實只是在保存到磁盤或者經過網絡傳輸時,序列化成二進制的方式而已,跟字符的unicode值毫無關係。學習

 

utf-32用4字節保存一個字符,雖然浪費空間,可是從二進制解析(decode)成字符的時候,速度確定比utf8快,由於每四個字節表示一個字符,在一個流中查找特定位置的字符確定要快, O(1)。ui

utf-8變長保存,雖然節省了空間,可是查找特定位置字符比較困難,時間效率是O(n)編碼