1、訪問檔案不亂碼的法則:用什麼編碼存的,就要用什麼編碼讀
2、decode encode
bytes------------->unicode---------->bytes
3、python3直譯器預設使用的字元編碼是utf-8
python2直譯器預設使用的字元編碼是ascii
4、python2的str就是python3的bytes
python2的unicode就是python3的str
5、unicode 列印編碼:
pycharm的終端是utf8的編碼,要按照列印終端的編碼來顯示出來.
windows的終端是gbk的編碼
linux的終端是utf8的編碼
總結字元編碼的發展可分為三個階段:
階段一:現代計算機起源於美國,最早誕生也是基於英文考慮的ascii
ascii:乙個bytes代表乙個字元(英文本元/鍵盤上的所有其他字元),1bytes=8bit,8bit可以表示0-2**8-1種變化,即可以表示256個字元
階段二:為了滿足中文和英文,中國人定製了gbk
gbk:2bytes代表乙個中文字元,1bytes表示乙個英文本元;為了滿足其他國家,各個國家紛紛定製了自己的編碼,日本把日文編到shift_jis裡,南韓把韓文編到euc-kr裡
階段三:各國有各國的標準,就會不可避免地出現衝突,結果就是,在多語言混合的文字中,顯示出來會有亂碼。
於是出現了unicode(定長), 統一用2bytes代表乙個字元, 雖然2**16-1=65535,但unicode卻可以存放100w+個字元,因為unicode存放了與其他編碼的對映關係,準確地說unicode並不是一種嚴格意義上的字元編碼表。很明顯對於通篇都是英文的文字來說,unicode的式無疑是多了一倍的儲存空間,於是產生了utf-8(可變長,全稱unicode transformation format),對英文本元只用1bytes表示,對中文字元用3bytes,對其他生僻字用更多的bytes去存
要想保證檔案不亂碼,用什麼編碼存的就用什麼編碼取.
x='上'
python2:啟動python直譯器,把檔案從記憶體讀出(以預設ascii碼),bytes=str,申請記憶體空間儲存字串
#coding:gbk
print('上'
([x])
#記憶體空間存的值['\xc9\xcf'] #(gbk),2個bytes,4個16進製制數
print([x.decode('
gbk')]) #
以什麼編碼存的就用什麼編碼取[u'\u4e0a'](unicode) 解碼
y=x.decode('
gbk') #
y是unicode型別,可以轉化為任意型別
print([y.encode('
utf-8
')])
x=u'上'print(type(x)) #
python2 有直接的unicode的型別,可以encode其他編碼.建議都加u
python3:啟動python直譯器,把檔案從記憶體讀出(以預設utf-8碼)
#coding:gbk 告訴python直譯器以什麼編碼讀取儲存字串
x='上
'y=x.encode('
gbk') #
只能encode證明python3預設就是以unicode存.
(y,type(y)) #
b'\xc9\xcf'
#python3的bytes型別就是python2的str型別,所有的字串編碼都是bytes型別
#檔案編碼(存)預設就是utf-8型別,字串編碼預設是unicode型別
python字元編碼
ascii 碼是乙個位元組,通常只能顯示英文本母和數字。unicode碼為了顯示多種語言產生,但是要占用兩個位元組,顯示文字要占用大量空間 utf 8 為了節約空間而生,英文本元只用乙個位元組儲存,中文字元需要三個位元組 character ascii unicode utf 8 a01000000...
python字元編碼
列印python檔案編碼 import sys print sys.getdefaultencoding 中文的乙個字元unicode占用2個位元組。對在於ascii字元占用1個位元組 utf 8中 中文字元佔3個位元組,英文本元占用1個位元組 編碼和轉碼 unicode不能再解碼了 它是基層的 u...
Python字元編碼
在用python程式設計中,字串有兩種表示方法 string 和 u string 為什麼字串要是用這兩種表達方式。不是僅僅用前一種呢?使用type 函式檢視,它們各自是str物件和unicode物件。這兩個物件有什麼差別嗎?還有經經常使用到的encode 和decode 又是幹什麼的呢?都說pyt...