首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Windows 下 Scrapy 0.20 運行報 UnicodeDecodeError:缺失 pywin32 導致 mimetypes 讀取註冊表失敗

     編輯:程式設計綜合問答

錯誤堆疊

File "C:\Python27\lib\mimetypes.py", line 258, in read_windows_registry
    for subkeyname in enum_types(hkcr):
File "C:\Python27\lib\mimetypes.py", line 249, in enum_types
    ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 9

根因

Scrapy 啟動時初始化 mimetypes 模塊,嘗試讀取 Windows 註冊表 HKCR\MIME\Database\Content Type 獲取 MIME 類型映射。註冊表中存在包含中文字符的鍵值(如 应用程序),Python 2.7 的 mimetypes.py 默認用 ASCII 解碼,導致崩潰。

解決方案

  1. 安裝 pywin32(關鍵):pip install pywin32==224 或下載 pywin32-224.win32-py2.7.exe 安裝。pywin32 提供 Unicode 版註冊表 API,修正 mimetypes 讀取路徑。
  2. 補全依賴:確保已安裝 Twisted、zope.interface、lxml、pyOpenSSL 對應 whl 包。
  3. 升級 Python:強烈建議遷移至 Python 3.8+,原生 Unicode 支持徹底消除此類問題,且 Scrapy 2.x 僅支持 Python 3。

驗證步驟

> python -c "import mimetypes; mimetypes.init(); print('OK')"
OK  # 無異常即修復成功

避坑指南

  • Windows 上開發 Python 爬蟲,**首選 Python 3 + 虛擬環境**。
  • 若必須維護 Python 2.7 專案,鎖定依賴版本並文檔化 pywin32 為強依賴。
  • 註冊表中文鍵值常見於辦公軟件、輸入法安裝後,定期清理無用註冊表項可減少誘發概率。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved