1. 程式人生 > >編碼BUG心得記錄

編碼BUG心得記錄

昨天學習爬蟲的時候,遇到了一個編碼方式的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中的編碼小細節

Python中有編碼轉換的函式,decode(char_set)可以實現其他編碼到Unicode的轉換,encode(char_set)實現Unicode到其他編碼的轉換。

 檢視Python文件會發現:

    open(filename, 'w')這個方法中,filename這個引數必須是Unicode編碼的引數,而我們的程式碼裡面,filename是通過str的相加來得到的,因此需要進行decode編碼來轉換編碼方式。