編碼BUG心得記錄
阿新 • • 發佈:2018-11-16
昨天學習爬蟲的時候,遇到了一個編碼方式的bug,先貼出BUG提示:
Traceback (most recent call last): File "E:/py code/practice-2.py", line 46, in <module> tiebaSpider(url,beginPage,endPage) File "E:/py code/practice-2.py", line 35, in tiebaSpider writePage(html,filename) File "E:/py code/practice-2.py", line 8, in writePage with open(filename,'w') as f: IOError: [Errno 22] invalid mode ('w') or filename: '\xe7\xac\xac1\xe9\xa1\xb5.html'
其中,出錯地方的程式碼為:
def writePage(html,filename):
print("正在儲存 "+filename)
with open(filename,'w') as f:
f.write(html)
print("-"*30)
找了很久,一直以為是路徑的問題,將路徑修改完後發現也不行,最後在網上查詢資料,發現是編碼的問題,將程式碼修改成如下便可以成功執行:
原因分析:
Python中有編碼轉換的函式,decode(char_set)可以實現其他編碼到Unicode的轉換,encode(char_set)實現Unicode到其他編碼的轉換。
檢視Python文件會發現:
open(filename, 'w')這個方法中,filename這個引數必須是Unicode編碼的引數,而我們的程式碼裡面,filename是通過str的相加來得到的,因此需要進行decode編碼來轉換編碼方式。