當試圖在我的Windows 10的機器上安裝mysql-python的我得到以下錯誤:Pip安裝會在Windows上引發UnicodeDecodeError。固定?
File "<string>", line 1, in <module>
File "C:\Users\LUCAFL~1\AppData\Local\Temp\pip-build-3u7aih0l\mysql-python\setup.py", line 21, in <module>
setuptools.setup(**metadata)
File "c:\program files (x86)\python35-32\lib\distutils\core.py", line 148, in setup
dist.run_commands()
...
File "c:\program files (x86)\python35-32\lib\subprocess.py", line 1055, in communicate
stdout = self.stdout.read()
File "c:\program files (x86)\python35-32\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 1716: character maps to <undefined>
我嘗試安裝其他包並收到了幾乎每一個(一個例外是pymysql)同樣的錯誤。所有這些軟件包都很大,並且有依賴關係。我想那些大的在我的用戶目錄APPDATA文件夾中創建臨時數據。如您所見,ü未正確解碼(ü爲字節0x81)。總是會產生錯誤的德語元音變音(主要是因爲它是我的用戶文件夾名稱的一部分)。
我搜索了過去2個小時,發現很多人遇到了同樣的問題,但大多數人都是打開github票據或討論Ubuntu/Fedora/OSX等問題。我讀了幾次, windows下的標準編碼是cp-1252導致了這個問題。我能以某種方式強制使用我的控制檯的窗口使用utf-8進行此會話,然後用它運行pip嗎?
請不要推薦我重命名我的用戶文件夾。這在Windows 10下並不容易,我不想僅僅因爲python就重新安裝windows。
我的設置:視窗10,Python的3.5.1,8.0.3 PIP
'distutils._msvccompiler._get_vc_env'使用子進程模塊調用'vcvarsall.bat'和'set'來獲取環境。當'stdout'是一個管道時,'set'默認使用當前控制檯代碼頁,在你的情況下是OEM代碼頁,850.但是,對於'universal_newlines = True',子進程使用' ANSI代碼頁,在你的情況下是1252.作爲快速修復,首先運行'chcp.com 1252'來更改控制檯代碼頁。 – eryksun
這裏distutils的最佳選擇是直接調用'subprocess.Popen'來運行'cmd.exe/U/c',這使得內置'set'命令輸出UTF-16LE文本。然後從'stdout = io.TextIOWrapper(proc.stdout,encoding ='utf-16le')'讀取輸出。通過這種方式,您可以獲得確切的Unicode環境,而不必通過ANSI或OEM代碼頁轉換對其進行修改。 – eryksun
這似乎解決了解碼問題。我仍然有點困惑,爲什麼改變代碼頁可以解決問題。我認爲這是一個UnicodeDecodeError? –