先做下科普:UNICODE字符編碼,也是一張字符與數(shù)字的映射,但是這里的數(shù)字被稱為代碼點(code point), 實際上就是十六進制的數(shù)字。
Python官方文檔中對Unicode字符串、字節(jié)串與編碼之間的關系有這樣一段描述:
Unicode字符串是一個代碼點(code point)序列,代碼點取值范圍為0到0x10FFFF(對應的十進制為1114111)。這個代碼點序列在存儲(包括內(nèi)存和物理磁盤)中需要被表示為一組字節(jié)(0到255之間的值),而將Unicode字符串轉換為字節(jié)序列的規(guī)則稱為編碼。
這里說的編碼不是指字符編碼,而是指編碼的過程以及這個過程中所使用到的Unicode字符的代碼點與字節(jié)的映射規(guī)則。這個映射不必是簡單的一對一映射,因此編碼過程也不必處理每個可能的Unicode字符,例如:
將Unicode字符串轉換為ASCII編碼的規(guī)則很簡單--對于每個代碼點:
如果代碼點數(shù)值《128,則每個字節(jié)與代碼點的值相同
如果代碼點數(shù)值》=128,則Unicode字符串無法在此編碼中進行表示(這種情況下,Python會引發(fā)一個UnicodeEncodeError異常)
將Unicode字符串轉換為UTF-8編碼使用以下規(guī)則:
如果代碼點數(shù)值《128,則由相應的字節(jié)值表示(與Unicode轉ASCII字節(jié)一樣)
如果代碼點數(shù)值》=128,則將其轉換為一個2個字節(jié),3個字節(jié)或4個字節(jié)的序列,該序列中的每個字節(jié)都在128到255之間。
簡單總結:
編碼(encode):將Unicode字符串(中的代碼點)轉換特定字符編碼對應的字節(jié)串的過程和規(guī)則
解碼(decode):將特定字符編碼的字節(jié)串轉換為對應的Unicode字符串(中的代碼點)的過程和規(guī)則
可見,無論是編碼還是解碼,都需要一個重要因素,就是特定的字符編碼。因為一個字符用不同的字符編碼進行編碼后的字節(jié)值以及字節(jié)個數(shù)大部分情況下是不同的,反之亦然。
-
編碼
+關注
關注
6文章
932瀏覽量
54731 -
python
+關注
關注
55文章
4767瀏覽量
84376
發(fā)布評論請先 登錄
相關推薦
評論