python2和python3的字元編碼問題

2021-08-20 21:35:13 字數 1261 閱讀 9990

python2和python3在字串編碼上是有明顯的區別。

在python2中,字串無法完全地支援國際字符集和unicode編碼。為了解決這種限制,python2對unicode資料使用了單獨的字串型別。要輸入unicode字串字面量,要在第乙個引號前加上』u』。python2中普通字串實際上就是已經編碼(非unicode)的位元組字串。

在python3中,不必加入這個字首字元,否則是語法錯誤,這是因為所有的字串預設已經是unicode編碼了。

>>> 『張三』 #python2 會自動將字串轉換為合適編碼的位元組字串

『\xe5\xbc\xa0\xe4\xbf\x8a』 #自動轉換為utf-8編碼的位元組字串

>>> u』張三』 #顯式指定字串型別為unicode型別, 此型別字串沒有編碼,儲存的是字元在unicode字符集中的**序號

u』\u5f20\u4fca』

>>> 『張三』.encode(『utf-8』) #python2 已經自動將其轉化為utf-8型別編碼,因此再次編碼(python2會將該字串當作用ascii或unicode編碼過)會出現錯誤。

traceback (most recent call last):

file 「」, line 1, in

unicodedecodeerror: 『ascii』 codec can』t decode byte 0xe5 in position 0: ordinal not in range(128)

>>> 『張三』.decode(『utf-8』) #python2 可以正常解碼,返回的字串類是無編碼的unicode型別

u』\u5f20\u4fca』

>>> b』張三』 # 『張三』 已被python2轉換為utf-8編碼,因此已為位元組字串

『\xe5\xbc\xa0\xe4\xbf\x8a』

>>> print 『張三』

張三》 print u』張三』

張三》 print b』張三』

張三》 『張三』 #python3的字串預設為unicode格式(無編碼)

『張三』

>>> u』張三』 #由於預設為unicode格式,因此字串不用像python2一樣顯式地指出其型別,否則是語法錯誤。

file 「」, line 1

u』張三』

^ syntaxerror: invalid syntax

>>> type(『張三』) #python3中文字字串和位元組字串是嚴格區分的,預設為unicode格式的文字字串

python3和python2的區別

1.效能 py3.0執行 pystone benchmark的速度比py2.5慢30 guido認為py3.0有極大的優化空間,在字串和整形操作上可 以取得很好的優化結果。py3.1效能比py2.5慢15 還有很大的提公升空間。2.編碼 py3.x原始碼檔案預設使用utf 8編碼,這就使得以下 是合...

Python2和Python3的比較

python2 python3 print fish print fish unicode 是單獨的 unicode utf 8 字串 b b china byte 和 bytearrays type b type bytes s b.decode 轉化成 string 型別b1 s encode ...

python3和python2的區別

這個星期開始學習python了,因為看的書都是基於python2.x,而且我安裝的是python3.1,所以書上寫的地方好多都不適用於python3.1,特意在google上search了一下3.x和2.x的區別。特此在自己的空間中記錄一下,以備以後查詢方便,也可以分享給想學習python的frie...