解碼:位元組—以特定的編碼方式—>字元
ascll
unicode字符集
utf-8
gbk/gb2312/gb18030
個人感覺python2中的編碼非常的不友好,而目前python3中以「utf-8」 作為系統預設編碼讓人省心不少
sys.getdefaultencoding() #檢視預設編碼方式
對應關係:
str(字串)
bytes(二進位制位元組) python3 中在字元引號前加『b』 表示
a='type is str'
b=b'type is bytes'
print(type(a))
print(type(b))
結果為
編碼:str 轉化為bytes
解碼:bytes 轉化為str
接下來是本文的重點 python編碼和解碼的函式隆重登場
str.encode(encoding='utf-8',errors='strict')
str.decode(encoding='utf-8',errors='strict')
encoding – 要使用的編碼,如"utf-8"。
errors – 設定不同錯誤的處理方案。預設為 『strict』,意為編碼錯誤引起乙個unicodeerror。 其他可能得值有 『ignore』, 『replace』, 『xmlcharrefreplace』, 『backslashreplace』 以及通過 codecs.register_error() 註冊的任何值。
下面分別以utf-8,unicode,gbk的方式解碼,程式和結果如下:
a='你好! 世界'
s1=a.encode() # 預設是utf-8
s2=a.encode('unicode-escape') # 以unicode
s3=a.encode('gbk')#以 gbk的方式
# 結果如下
b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81 \xe4\xb8\x96\xe7\x95\x8c' #utf-8的結果
b'\\u4f60\\u597d\\uff01 \\u4e16\\u754c' #unicode的結果
b'\xc4\xe3\xba\xc3\xa3\xa1 \xca\xc0\xbd\xe7' #gbk的結果
簡答:raw_unicode-escape 是直接轉化字串型別,而 unicode_escape 是編碼或解碼成指定的資料型別1 encode(『unicode-escape』)可將此str編碼為bytes型別, 內容則是unicode形式
2 decode(『unicode-escape』)可將內容為unicode形式的bytes型別轉換為str
3 encode(『raw_unicode_escape』)將此str轉化為bytes
4 decode(『raw_unicode_escape』)輸出內容為bytes形式的字串
以下貼出我的試驗結果,最好自己寫以下**實踐一下,能夠快速助自己理解
encode(『unicode-escape』)可將此str編碼為bytes型別, 內容則是unicode形式
a='\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81 \xe4\xb8\x96\xe7\x95\x8c'
en=a.encode('unicode_escape')
de=en.decode()
print('unicode_escape的型別 %s'% type(en))
print(en)
print('unicode_escape的型別 %s'% type(de))
print(de)
結果如下:
raw_unicode_escape的型別 b'\\xe4\\xbd\\xa0\\xe5\\xa5\\xbd\\xef\\xbc\\x81 \\xe4\\xb8\\x96\\xe7\\x95\\x8c'
raw_unicode_escape的型別 \xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81 \xe4\xb8\x96\xe7\x95\x8c
encode(『raw_unicode_escape』)將此str轉化為bytes, 再decode為str
a='\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81 \xe4\xb8\x96\xe7\x95\x8c'
en=a.encode('raw_unicode_escape')
de=en.decode()
print('raw_unicode_escape的型別 %s'% type(en))
print(en)
print('raw_unicode_escape的型別 %s'% type(de))
print(de)
結果如下:
raw_unicode_escape的型別 b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81 \xe4\xb8\x96\xe7\x95\x8c'
raw_unicode_escape的型別 你好! 世界
decode(『unicode-escape』)可將內容為unicode形式的bytes型別轉換為str
a=b'\u4f60\u597d \u4e16\u754c\uff01'
de=a.decode('unicode-escape')
print(type(a))
print('unicode_escape的型別 %s'% type(de))
print(de)
結果如下:
unicode_escape的型別 你好 世界!
decode(『raw_unicode_escape』)輸出內容為bytes形式的字串
a=b'\u4f60\u597d \u4e16\u754c\uff01'
de=a.decode('raw_unicode-escape')
print(type(a))
print('unicode_escape的型別 %s'% type(de))
print(de)
結果如下:
unicode_escape的型別 你好 世界!
Python中的編碼與解碼
之前一直對python檔案中編碼解碼糊里糊塗,今天看到一篇文章,覺得把我講的有點明白了。寫個心得吧。python 裡面的編碼和解碼也就是 unicode 和 str 這兩種形式的相互轉化。編碼是 unicode str,相反的,解碼就是 str unicode。str形式,也就是字串形式都是以一定的...
Python 編碼與解碼
字串型別是對人類友好的符號,但計算機只認識一種符號,那就是二進位制 binary 數,或者說是數字。為了用計算機可以理解的數字描述人類使用的字元,我們需要一張數字與字元對應的表。我們都知道在計算機中 1 byte 8bits,可以儲存 0 255共256個值,也就是說 1byte最多可以表示 256...
python的編碼與解碼
1.特殊情況 xe5 xae x9d xe9 x python2控制台bai輸出會有這種情況,包括以下list裡面的漢字雖du然是utf8格式的但仍然zhi不可見中文。只需要包要檢視的list轉為str並decode string escape 例子為 li 33,39 寶馬 36,39 馬 pri...