sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改變標準輸出的預設編碼
阿新 • • 發佈:2019-01-02
不論使用urllib還是使用requests庫經常會遇到中文編碼錯誤的問題,我就經常遇到,因為python安裝在windows平臺上,cmd的預設編碼為GBK,所以在cmd中顯示中文時會經常提示gbk編碼錯誤,後來找到了貼在,完美的解決了該問題,下面我分享給大家
UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 0: illegal multibyte sequence
在cmd中我們輸出data.read()時,中文亂碼,大部分時候是因為print函式,其實print()函式的侷限就是Python預設編碼的侷限,因為系統是win7的,python的預設編碼不是'utf-8',改一下python的預設編碼成'utf-8'就行了,
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改變標準輸出的預設編碼
可以看到該語句修改了python的預設編碼為utf8,並賦予了我們的stdout輸出,使得python的輸出預設編碼為utf8,但是當我們在cmd中輸出還是中文亂碼,這是cmd的鍋,cmd不能很好地相容utf8,而IDLE就可以,甚至在IDLE下執行,連“改變標準輸出的預設編碼”都不用,因為它預設就是utf8。如果一定要在cmd下執行,那就改一下編碼,比如我換成“gb18030”,就能正常顯示了:
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #改變標準輸出的預設編碼
data.decode('utf8')完美解決。