python中对字符串进行编码_Python 中的字符串编码
對Python字符編碼一直沒搞明白,今天看《Python參考手冊》再次遇到這個問題,重新整理下
Python中字符串字面量用于指定一個字符序列,其定義方法是把文本放入單引號('),雙引號(")或者三引號('''或""")中。
Python2中,字符串字面量對應于8位字符或者面向字節的數據。關于這些字符串有一個很重要的限制,即它們無法完全支持國際字符集和Unicode。為了解決這種限制問題,Python2對Unicode數據用了單獨的字符串類型。要輸入Unicode字符串字面量,要在第一個引號前面加上前綴"u"。
Python3中,不必加這個前綴(如果加上會算作語法錯誤),因為所有字符串已是Unicode編碼。如果使用-U選項運行解釋器,Python2將會模擬這種行為(即所有字符串字面量將被作為Unicode字符串對待,u前綴可以省略)
Python2 Python3 str類型比較
Python2
type("str") #type(b"str") #type(u"str") #
Python3
type("str") #
type(b"str") #
type(u"str") #
Python2對Unicode數據用了單獨的字符串類型unicode.
要將一個已編碼的字節字符串指定為字面量,在第一個引號前面加上"b",這樣才能從字面上創建一個單字節的字符串。字節字面量在大多數程序中極少使用,因為這種語法直到Python2.6才出現,而且在次版本中,字節字面量和普通字符串之間沒有差距。但在Python3中,字節字面量變成了與普通字符串不同的新的bytes類型數據。(從上面的代碼可以看出)
Python2中的編碼:
#!/usr/bin/python#-*- coding:UTF-8 -*- s='代碼' #python2 會自動將字符串轉換為合適編碼的字節字符串,自動轉換為UTF-8編碼的字節字符串?'\xe4\xbb\xa3\xe7\xa0\x81'u=u'代碼' #顯式指定字符串類型為unicode類型, 此類型字符串沒有編碼,保存的是字符在unicode字符集中的代碼點(序號) u'\u4ee3\u7801' print len(s) #6 print len(u) #2 print repr(s) #'\xe4\xbb\xa3\xe7\xa0\x81' print repr(u) #u'\u4ee3\u7801' #print s.encode('utf-8') #UnicodeDecodeError: 'ascii' codec can't decode #python2 已經自動將其轉化為utf-8類型編碼,因此再次編碼會報錯 print repr(s.decode('utf-8')) #u'\u4ee3\u7801' #python2 可以正常解碼,返回的字符串類是無編碼的unicode類型 print repr(u.encode('utf-8')) #'\xe4\xbb\xa3\xe7\xa0\x81'#print repr(u.decode('utf-8')) #UnicodeEncodeError: 'ascii' codec can't encode characters b=b'代碼' #已被python2轉換為utf-8編碼,因此已為字節字符串 print len(b) #6 print repr(b) #'\xe4\xbb\xa3\xe7\xa0\x81 print repr(b.decode('utf-8')) #u'\u4ee3\u7801'#print repr(b.encode('utf-8')) #UnicodeDecodeError: 'ascii' codec can't decode byte
嚴格意義上說,str其實是字節串(Python2中,字符串字面量對應于8位字符或者面向字節的數據),它是unicode經過編碼后的字節組成的序列;對UTF-8編碼的str'代碼'使用len()函數時,結果是6,因為實際上,UTF-8編碼的'代碼' == '\xe4\xbb\xa3\xe7\xa0\x81';unicode才是真正意義上的字符串,對字節串str使用正確的字符編碼進行解碼后獲得,并且len(u'代碼') == 2
Python3中的編碼
#!/usr/local/bin/python3#-*- coding: UTF-8 -*-
s='代碼'
print(repr(s)) #代碼print(s.encode('utf-8')) #b'\xe4\xbb\xa3\xe7\xa0\x81'
type(s)#
type(s.encode('utf-8')) #
type(b'str') #
print(s.decode('utf-8')) #AttributeError: 'str' object has no attribute 'decode'
Python3中,所有字符串已是Unicode編碼,只能encode為某一個編碼類型的字節字符串bytes,而不能decode
參考:
總結
以上是生活随笔為你收集整理的python中对字符串进行编码_Python 中的字符串编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: L0、L1、L2范数在机器学习中的应用
- 下一篇: linux 网络块存储,网络存储集群