先做下科普:UNICODE字符編碼,也是一張字符與數字的映射,但是這里的數字被稱為代碼點(code point), 實際上就是十六進制的數字。
Python官方文檔中對Unicode字符串、字節串與編碼之間的關系有這樣一段描述:
Unicode字符串是一個代碼點(code point)序列,代碼點取值范圍為0到0x10FFFF(對應的十進制為1114111)。這個代碼點序列在存儲(包括內存和物理磁盤)中需要被表示為一組字節(0到255之間的值),而將Unicode字符串轉換為字節序列的規則稱為編碼。
這里說的編碼不是指字符編碼,而是指編碼的過程以及這個過程中所使用到的Unicode字符的代碼點與字節的映射規則。這個映射不必是簡單的一對一映射,因此編碼過程也不必處理每個可能的Unicode字符,例如:
將Unicode字符串轉換為ASCII編碼的規則很簡單--對于每個代碼點:
如果代碼點數值《128,則每個字節與代碼點的值相同
如果代碼點數值》=128,則Unicode字符串無法在此編碼中進行表示(這種情況下,Python會引發一個UnicodeEncodeError異常)
將Unicode字符串轉換為UTF-8編碼使用以下規則:
如果代碼點數值《128,則由相應的字節值表示(與Unicode轉ASCII字節一樣)
如果代碼點數值》=128,則將其轉換為一個2個字節,3個字節或4個字節的序列,該序列中的每個字節都在128到255之間。
簡單總結:
編碼(encode):將Unicode字符串(中的代碼點)轉換特定字符編碼對應的字節串的過程和規則
解碼(decode):將特定字符編碼的字節串轉換為對應的Unicode字符串(中的代碼點)的過程和規則
可見,無論是編碼還是解碼,都需要一個重要因素,就是特定的字符編碼。因為一個字符用不同的字符編碼進行編碼后的字節值以及字節個數大部分情況下是不同的,反之亦然。
-
編碼
+關注
關注
6文章
957瀏覽量
54956 -
python
+關注
關注
56文章
4807瀏覽量
85042
發布評論請先 登錄
相關推薦
正交編碼解碼原理及解碼思路
什么是音頻的編碼和解碼/HZ(赫茲)
短信編碼與解碼C語言
![短信<b class='flag-5'>編碼</b>與<b class='flag-5'>解碼</b>C語言](https://file.elecfans.com/web2/M00/49/A4/pYYBAGKhvEaASLGrAABOJX-ZgSk356.png)
java實現的哈夫曼編碼與解碼
![java實現的哈夫曼<b class='flag-5'>編碼</b>與<b class='flag-5'>解碼</b>](https://file1.elecfans.com//web2/M00/A7/10/wKgZomUMQiOAGWFVAAAWtumAj1s792.jpg)
NVIDIA推出適用于Python的VPF,簡化開發GPU加速視頻編碼/解碼
STM32的音頻編碼與在PC端的解碼
![STM32的音頻<b class='flag-5'>編碼</b>與在PC端的<b class='flag-5'>解碼</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于transformer的編碼器-解碼器模型的工作原理
![基于transformer的<b class='flag-5'>編碼</b>器-<b class='flag-5'>解碼</b>器模型的工作原理](https://file1.elecfans.com/web2/M00/89/77/wKgaomSFZ5uAC9TlAAATuTe5txY130.png)
Python中的默認編碼
![<b class='flag-5'>Python</b>中的默認<b class='flag-5'>編碼</b>](https://file1.elecfans.com/web2/M00/8C/11/wKgaomSlJYOAEID-AABSDygYvxs449.jpg)
Python字符編碼轉換
![<b class='flag-5'>Python</b>字符<b class='flag-5'>編碼</b>轉換](https://file1.elecfans.com/web2/M00/8C/10/wKgZomSlKM2AJzeuAAAldVnmAjg283.jpg)
評論