pyhton關於編碼Unicode,utf 8

2021-08-29 22:37:33 字數 2160 閱讀 2218

1.unicode和utf-8

簡單來說:

unicode 是「字符集」

utf-8 是「編碼規則」,是unicode的實現方式。

在計算機記憶體中,統一使用unicode編碼,當需要儲存到硬碟或者需要傳輸的時候,就轉換為utf-8編碼。

python3 記憶體中使用的字串全部是 unicode 碼,但是網路傳輸的資料或者從磁碟讀取的資料是把 unicode 碼轉換過的資料,通常情況下可能是 utf-8 格式的資料,所以如果從網路中讀取或者磁碟中讀取其實就是把 utf-8 格式的資料解碼成 unicode 碼資料,相反如果想把記憶體中 unicode 碼資料儲存到磁碟或者網路中需要對 unicode 碼進行編碼,通常可以採用 utf-8 的形式進行編碼。

由於python的字串型別是str,在記憶體中以unicode表示,乙個字元對應若干個位元組。如果要在網路上傳輸,或者儲存到磁碟上,就需要把str變為以位元組為單位的bytes。

2.python 檢視預設編碼方式

import sys

print

(sys.getdefaultencoding())

#result

utf-

8

3.windows作業系統不同編碼方式四個選項:ansi,unicode,unicode big endian 和 utf-8

1)ansi是預設的編碼方式。對於英文檔案是ascii編碼,對於簡體中文檔案是gb2312編碼(只針對windows簡體中文版,如果是正體中文版會採用big5碼)。

2)unicode編碼指的是ucs-2編碼方式,即直接用兩個位元組存入字元的unicode碼。這個選項用的little endian格式。

3)unicode big endian編碼與上乙個選項相對應。

unicode碼可以採用ucs-2格式直接儲存。以漢字」嚴「為例,unicode碼是4e25,需要用兩個位元組儲存,乙個位元組是4e,另乙個位元組是25。儲存的時候,4e在前,25在後,就是big endian方式;25在前,4e在後,就是little endian方式。

這兩個古怪的名稱來自英國作家斯威夫特的《格列佛遊記》。在該書中,小人國裡爆發了內戰,戰爭起因是人們爭論,吃雞蛋時究竟是從大頭(big-endian)敲開還是從小頭(little-endian)敲開。為了這件事情,前後爆發了六次戰爭,乙個皇帝送了命,另乙個皇帝丟了王位。

因此,第乙個位元組在前,就是」大頭方式「(big endian),第二個位元組在前就是」小頭方式「(little endian)。

那麼很自然的,就會出現乙個問題:計算機怎麼知道某乙個檔案到底採用哪一種方式編碼?

unicode規範中定義,每乙個檔案的最前面分別加入乙個表示編碼順序的字元,這個字元的名字叫做」零寬度非換行空格「(zero width no-break space),用feff表示。這正好是兩個位元組,而且ff比fe大1。

如果乙個文字檔案的頭兩個位元組是fe ff,就表示該檔案採用大頭方式;如果頭兩個位元組是ff fe,就表示該檔案採用小頭方式。

4)utf-8編碼。

4.python3內的儲存和轉化

python3內部字串在記憶體中就以unicode形式存在『a』和『\u0041』沒有任何區別, '\u4e2d』和』中』沒有任何區別,故str型別也可稱為unicode字串,通過以下方法編碼為unicode形式:

>>

>

'小公尺'

.encode(

'unicode-escape'

)b'\\u5c0f\\u7c73'

#轉化為utf-8

>>

>s=

'小公尺'

.encode(

'unicode-escape'

)>>

> s.decode(

'unicode-escape'

).encode(

)b'\xe5\xb0\x8f\xe7\xb1\xb3'

Python關於list裡面的unicode編碼

利用python2.7結巴分詞對文字分詞之後存進list列表裡面 import jieba seg list jieba.cut 網路,讓我們之間的距離變的如此之近,也如此遙遠。a i for i in seg list a str a replace u s a.decode unicode es...

iOS 中的編碼方式詳解(主要講解Unicode)

完全支援 unicode,還替你幹了大部分的重活兒,處理各種語言 各種書寫系統的文字仍然是乙個非常複雜的事情。作為乙個程式設計師,有些事情你應該知道。這篇文章裡,我會先向你簡單地講一下 unicode 這個標準,然後解釋nsstring是怎麼處理它的,再討論一下你可能會遇到的一些常見問題。計算機沒法...

關於編碼設計

編碼設計在大型專案裡常常被搞得異常複雜,大多數是人為因素增加了複雜度。小型專案則往往走向另乙個極端,忽視編碼設計,在後續維護時發現資料隨著時間的推移越來越凌亂,無意中增加了維護成本同時介面友好度大幅下降。大多數情況,往往是因為沒有專門負責呈現和分類的字段,所以才費盡心機設計編碼,以便讓其擔負更多的任...