今天在win10下裝完python和pip后,發現在python中運行任何指令都會報錯——”LookupError: unknown encoding: cp65001”的錯誤提示,並且鼠標焦點在命令行窗口內時,win10自帶輸入法無法切換為中文模式。或許裝其他輸入法會有用,但一來並不想委屈求全,二來料想也不能解決報錯問題。於是到處找辦法。找來找去就是那一篇文章,真是一個人寫,十個人抄,還都不管能不能行。找到兩個質量略好的——stackoverflow1和stackoverflow2。總之是代碼頁(codepage)的問題,在cmd下chcp命令(大概是change codepage?)可查看當前代碼頁,chcp nnn可改變當前使用的代碼頁。
常用有936-GBK編碼,437-美國英語,還有這個出問題的65001-utf-8編碼。
所以解決報錯可以每次打開命令行都用chcp 936
來更換當前代碼頁,也可以在屬性和默認值里修改。然而修改后重啟cmd查看屬性還是65001的代碼頁。我猜是個bug吧。那兩個帖子描述的解決方案不夠優雅,所以幾乎是放棄了,重裝的心都有了。然而,然而,我想到管理員命令行是正常的,於是又有了希望。打開注冊表,定位到”HKEY_CURRENT_USER\Console”,對比正常與非正常的鍵值對,發現只多了一個codepage鍵,於是直接修改CodePage鍵的值為3a8(936的十六進制值),然后重啟命令行,啊,只如初見。
C:\Users\haha>chcp /? 顯示或設置活動代碼頁編號。 CHCP [nnn] nnn 指定代碼頁編號。 不帶參數鍵入 CHCP 以顯示活動代碼頁編號。
C:\Users\haha>chcp /? 顯示或設置活動代碼頁編號。 CHCP [nnn] nnn 指定代碼頁編號。 不帶參數鍵入 CHCP 以顯示活動代碼頁編號。
歡心得意之際發現命令行從前往后寫時,如果后面有字就會覆蓋掉,這個情況word也有,但一直忍着。查了一下發現是插入模式下不會有這個問題,改寫模式會有,於是在屬性里勾選插入模式。啊,滿意。