ascii美國標準資訊交換碼
utf-88為utf轉換格式(無符號位元組序列,長度為1-4個位元組)
utf-1616位utf轉換格式(無符號位元組序列,通常是16位長,兩個位元組)
unicode可以表示超過90000個字元。
ascii字串成了stringtype,而unicode字串成了unicodetype型別。它們的行為是非常相近的。string模組裡面都有相應的處理函式。string模組已經停止了更新,只保留了ascii碼的支援,string模組已經不推薦使用,在任何需要跟unicode相容的**裡都不要在用該模組。
python把硬編碼的字串叫做字面上的字串,預設所有字面上的字串都用ascii編碼,可以通過在字串前面加乙個『u'字首的方式宣告unicode字串,這個』u'字首告訴python後面的字串要編碼成unicode字串。
codec
codec是coder/decoder的首字母組合。它定義了文字跟二進位制值的轉換方式,跟ascii那種用乙個位元組把字元轉換成數字的方式不同,unicode用的是多位元組。這導致了unicode支援多種不同的編碼方式。比如說codec支援:ascii, iso 8859/latin-1, utf-8, utf-16
utf-8編碼可以用1-4個位元組來表示其他語言的字元,cjk/east這樣的東亞文字一般都是用3個位元組來表示,那些少用的、特殊的或者歷史遺留的字元用4個位元組來表示。ascii字元的utf-8編碼跟ascii編碼完全相同。
編碼解碼
unicode支援多種編碼格式,當你向乙個檔案寫入字串的時候,你必須定義乙個編碼(encoding引數)用於把對應的unicode內容轉換成你定義的格式,python通過unicode字串的encode()函式解決了這個問題,該函式接受字串中的字元為引數,輸出你指定的編碼格式的內容。
所以,每次我們寫乙個unicode字串到磁碟上我們都要用指定的編碼器給它「編碼」一下。相應地,當我們從這個檔案讀取資料時,我們必須「解碼」該檔案,使之成為相應的unicode字串物件。
獲取檔案的編碼
import sys
print(sys.getdefaultencoding())
設定python檔案的編碼
#encoding=utf8
#設定檔案的編碼
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
print(sys.getdefaultencoding())
將gbk檔案轉換為utf-8檔案
#encoding=utf8
#設定檔案的編碼
import sys
import codecs
reload(sys)
sys.setdefaultencoding('utf-8')
print(sys.getdefaultencoding())
#讀檔案操作
#使用codec包進行檔案的讀取,在使用open()函式時指定編碼的型別:
#以gbk編碼格式讀取,並轉換為utf-8
line=line.decode('gbk','ignore').encode('utf-8')
因為decode的函式原型是decode([encoding], [errors='strict']),可以用第二個引數控制錯誤處理的策略,預設的引數就是strict,代表遇到非法字元時丟擲異常;
如果設定為ignore,則會忽略非法字元;
如果設定為replace,則會用?取代非法字元;
如果設定為xmlcharrefreplace,則使用xml的字元引用
python Unicode 編碼問題
今天在用python寫分頁 傳入兩個引數 page num,page size,報錯了 我用的是python2.7 列印變數型別是unicode 所以要把unicode 轉成 int 提供兩種方法,都是先轉成字串,再轉成int page num int filter str.isdigit,page...
python unicode 編碼整理
unicode 只定義字元對應的數字,但沒有規定這些數字如何儲存起來,比如像中文的 我 字儲存時需要兩個位元組來表示,而英文本母a卻只需要乙個位元組,有些其他的字元可能需要3 4個位元組。utf 8 是對 unicode 編碼儲存的一種實現方式,同樣的還有 utf 16,utf 32。utf 8 是...
python unicode編碼轉換
python unicode編碼轉換 chr 20000 北 ord 函式主要用來返回對應字元的ascii碼,chr 主要用來表示ascii碼對應的字元他的輸入時數字,可以用十進位制,也可以用十六進製制。print ord a 97print chr 97 aprint chr 0x61 a乙個簡單...