1. 程式人生 > >【python中的編碼問題】

【python中的編碼問題】

網絡 文件操作 指定 enc 引號 pytho ascii碼 磁盤 encode

1、首先要在開頭說明編碼方式為:utf-8

例如:-*- coding: utf-8 -*-

2、如果遇到字符串,立刻轉化為unicode,不要使用str(),直接使用unicode()

unicode_str = unicode(‘中文‘, encoding=‘utf-8‘)
print unicode_str.encode(‘utf-8‘)

3、如果是對於文件操作,打開文件的時候,最好使用codecs.open,替代open

import codecs
codecs.open(‘filename‘, encoding=‘utf8‘)

4、unicode通過encode編碼轉化成str,str通過decode解碼轉化成unicode

舉個栗子:一個utf-8格式的字符串,先被解碼為unicode,這時候不能直接輸出,encode編碼後就可以輸出了

當對字符串進行編碼的時候,會先用默認編碼將自己解碼為unicode,然後再將unicode編碼為你指定的編碼

一些個人理解,一開始的計算機只支持ASCII碼,因為是美國人發明的,所以只支持127個字符;後來為了統一,出現了unicode碼,也叫萬國碼,但是unicode編碼的英文會比ASCII碼多一倍存儲空間,所以就出現了把unicode編碼轉化為可變長編碼的UTF-8編碼方式;在計算機內存中,統一使用unicode編碼,當需要保存到硬盤或者需要傳輸的時候,就轉換為UTF-8編碼。

*****python的字符串類型是str,在內存中以unicode表示,一個字符對應若幹個字節,如果要在網絡上傳輸或者保存到磁盤上,就需要把str變為bytes。

python中,bytes類型的數據用帶b的前綴的單引號或者雙引號表示。以unicode表示的str通過encode()方法可以編碼為指定的bytes。

*****反過來,如果從網絡或者磁盤上讀取了字節流,那麽讀到的數據就是bytes,要把bytes變為str,就要用到decode()方法。

【python中的編碼問題】