Python學習筆記 Unicode

2021-07-11 04:20:04 字數 2460 閱讀 8966

普通字串可以用多種方式編碼成unicode字串,具體要看你究竟選擇了哪種編碼:

unicodestring = u"hello world" 

# 將unicode轉化為普通python字串:"encode" 

utf8string = unicodestring.encode("utf-8") 

asciistring = unicodestring.encode("ascii") 

isostring = unicodestring.encode("iso-8859-1") 

utf16string = unicodestring.encode("utf-16") 

# 將普通python字串轉化為unicode:"decode" 

plainstring1 = unicode(utf8string, "utf-8") 

plainstring2 = unicode(asciistring, "ascii") 

plainstring3 = unicode(isostring, "iso-8859-1") 

plainstring4 = unicode(utf16string, "utf-16") 

這裡簡單的說一下。(下面內容基本上時從《python.core.programming.2ed》上摘的)

unicode是計算機可以支援這個星球上的多種語言的秘密**,在unicode之前,用的都是ascii,ascii嗎非常簡單,每個英文本元都用7位二進位制數的方式儲存在計算機內,其範圍是32到126.它的實現原理這裡也不說了。

但是ascii碼只能表示95個可列印的字元,後來把ascii擴充套件到了8位,這樣就能表示223個字元了,雖然這個來表示歐美字母語言已經足夠了,但是對於像中文等語系來說就太少了。於是unicode碼誕生了。

unicode通過使用乙個或者多個位元組來表示乙個字元,這樣就突破了ascii的限制,這樣,unicode可以表示超過90000個字元了。

python 與unicode

為了讓unicode和ascii碼值的字串看起來盡可能的相像,python的字串從原來的簡單資料型別改變成了真正的物件,ascii字串成了stringtype,而unicode字串成了unicodetype型別,他們的行為非常相近。string模組裡面都有相應的處理函式。string模組已經停止了更新,只保留了對asxii碼的支援,string模組已經不推薦使用,在任何要跟unicode相容的**裡都不要再用該模組,python保留該模組僅僅為了向後相容。

python裡面預設所有字面上的字串都用ascii編碼,可以通過在字串前面加乙個『u』字首的方式宣告unicode字串,這個『u』字首告訴python後面的字串要編成unicode字串。

>>> "hello world" #ascii string

'hello world'

>>> u"hello world" #unicode string

u'hello world'

內建的str()函式和chr()函式不能處理unicode,它們只能處理常規ascii編碼的字串,如果乙個unicode字串作為引數傳給了str()函式,它會首先被轉換成ascii碼字串然後交給str()函式。

codecs

codec是把coder/decoder得首字母組合,它定義了文字跟二進位制的轉換方式,跟ascii那種用乙個位元組把字元轉換成數字的方式不同,unicode用的是多位元組,這導致了unicode支援多種不同的編碼方式,比如說codec支援的四種耳熟能詳的編碼方式是:ascii,iso8859—1/latin-1,utf-8,和utf-16

最著名的是utf-8編碼,它也用乙個位元組來編碼ascii字元,這讓那些必須同時處理ascii碼和unicode碼文字的程式設計師的工作變得非常輕鬆,因為ascii字元的utf-8編碼和ascii編碼完全相同。

utf-8編碼可以用1到4個位元組來表示其他語言的字元,這給那些需要直接處理unicode資料的程式設計師帶來了麻煩,因為他們沒有辦法按照固定長度逐一讀出各個字元,幸運的是我們不需要掌握直接讀取unicode資料的方法,python已經替我們完成了相關細節,我們無需為處理多位元組字元的複雜問題而擔心。

utf-16也是一種變長編碼,但是它不常用。

編碼解碼

unicode支援多種編碼格式,這為程式設計師帶來了額外的負擔,每當你向乙個檔案寫入字串的時候,你必須定義乙個編碼用於把對應的unicode內容轉換成你定義的格式,python通過unicode字串的encode()函式解決了這個問題,該函式接受字串中的字元為引數,輸出你指定的編碼格式的內容。

所以,每次我們寫乙個unicode字串到磁碟上我們都要用指定的編碼器給他「編碼「一下,相應地,當我們從這個檔案讀取資料時,我們必須」解碼」該檔案,使之成為unicode字串物件。

簡單的例子:

下面的**建立了乙個unicode字串,用utf-8編碼器將它編碼,然後寫入到乙個檔案中去,接著把資料從檔案中讀回來,解碼成unicode字串物件,最後,列印出unicode字串,用以確認程式正確地執行。

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...

python教學筆記 python學習筆記(一)

1.eval 函式 eval是單詞evaluate的縮寫,就是 求.的值的意思。eval 函式的作用是把str轉換成list,dict,tuple.li 1 1,2,3 print eval li 1 di 1 print eval di 1 tu 1 2,4,6 print eval tu 1 執...

python學習筆記

coding utf 8 coding utf 8 應該像八股文一樣在每個指令碼的頭部宣告,這是個忠告 為了解決中文相容問題,同時你應該選擇支援 unicode 編碼的編輯器環境,保證在執行指令碼中的每個漢字都是使用 utf 8 編碼過的。cdays 5 exercise 3.py 求0 100之間...