python 字元編碼

2022-06-26 16:39:11 字數 2089 閱讀 1454

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('上'

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

print

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