(轉)TypeError: cannot use a string pattern on a bytes-like object 解決辦法及原理

TypeError: cannot use a string pattern on a bytes-like object

最近寫代碼,python2和python3之間切換,難免會碰到一些問題,有些方法比如re模塊的findall要求傳入的是字符串格式的參數,urllib.request.urlopen(url).read()返回的是bytes類型(這個是python3中才有的類型,所以很多python2中的方法都相應更改了)的,這樣傳參就會報以上錯誤。

python3中Unicode字符串是默認格式(就是str類型),ASCII編碼的字符串(就是bytes類型,bytes類型是包含字節值,其實不算是字符串,python3還有bytearray字節數組類型)要在前面加操作符b或B;python2中則是相反的,ASCII編碼字符串是默認,Unicode字符串要在前面加操作符u或U

一勞永逸的解決方法就是根據你傳進來的參數自動辨別編碼格式,然後進行相應的解碼,就搞定啦:

import chardet #需要導入這個模塊,檢測編碼格式
encode_type = chardet.detect(html)
html = html.decode(encode_type[‘encoding’]) #進行相應解碼,賦給原標識符(變量)

import chardet   #需要導入這個模塊,檢測編碼格式
encode_type = chardet.detect(html)  
html = html.decode(encode_type['encoding']) #進行相應解碼,賦給原標識符(變量)
str到bytes:調用方法encode().
編碼是把Unicode字符串以各種方式編碼成爲機器能讀懂的ASCII字符串
從bytes到str:調用方法decode().

轉載自https://blog.csdn.net/jieli_/article/details/70166244

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章