TypeError: cannot use a string pattern on a bytes-like object
阿新 • • 發佈:2018-06-03
dsm 模塊 odi nbsp mode IE python2 play ray
原文鏈接
一勞永逸解決: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‘]) #進行相應解碼,賦給原標識符(變量)
從str到bytes:調用方法encode().
編碼是把Unicode字符串以各種方式編碼成為機器能讀懂的ASCII字符串
從bytes到str:調用方法decode().
原文鏈接
TypeError: cannot use a string pattern on a bytes-like object