[英]Raspberry Pi using Python to mkdir
我想使用Python從網站下載所有圖片。 我已經擁有HTML文件的標題,所以我使用os.mkdir()
創建一個文件夾,但標題包含中文。 在Raspberry Pi(OS:Debian)上執行以下代碼時,有一個例外:
UnicodeEncodeError:'ascii'編解碼器無法編碼位置20-38中的字符:序數不在范圍內(128)
try:
os.mkdir(path)
except:
print "create folder failed"
continue
如果我在Mac上運行代碼,一切都很好。
我用Google搜索了問題並嘗試了下面的代碼,但它無法正常工作。
reload(sys)
sys.setdefaultencoding('utf-8')
更新:
我已經改變了很多代碼,並閱讀了一些關於unicode,utf-8 .etc的文章。 但每次我在Raspberry Pi上運行代碼時,它都會崩潰。 然后我在PC上安裝了Debian OS(這是我在Raspberry Pi上安裝的),運行代碼,一切都很好。
所以問題實際上不是由代碼引起的,而是由SSH造成的。
如果我在桌面環境中直接在Debian PC上運行代碼,那沒關系。 如果我使用SSH從我的Mac登錄shell並運行代碼,會出現“Unicode ......”之類的異常。
我認為這是由環境變量引起的,我明天會試着弄清楚,謝謝你們:-)
您可以在目錄名稱之前添加r
或u
前綴,例如
>>> import os
>>> os.mkdir(r'文件夾')
>>> os.mkdir(u'文件夾')
它會為我創建'xxx /文件夾/'。
希望能幫助到你。
setdefaultencoding
適用於print
或write
- 嘗試os.mkdir( path.encode('utf-8') )
-
順便說一句:嘗試print sys.getfilesystemencoding()
- 如果你得到的東西不同於utf8
,你應該在Bash中設置環境變量LANG
。 簽入Bash echo $LANG
。 如果你得到沒有utf8
東西,請在運行沒有encode()
python腳本之前嘗試在Bash中export LANG=en_GB.utf8
。 如果它可以工作,你可以將export LANG=en_GB.utf8
放在~/.bashrc
或~/.profile
或者/etc/profile
在raspberry
搜索有關locale
和locales
更多信息
最后,我知道出了什么問題:-)
唯一應該做的就是將LC_CTYPE
環境變量設置為"***.UTF-8"
我在PC上用英語安裝了Debian,在另一台PC上安裝了Debian用中文。 我有一個vps(Ubuntu英文版),我有一台Mac(Mac OS X英文版)。 這就是我得到的
如您所見,當LC_CTPPE
為"***.UTF-8"
,我可以輸入中文,shell可以顯示中文。 但是當它是別的東西時,我的程序會粉碎。
摘要:
如果代碼可以在您的計算機上正常運行,但不能在另一台計算機上運行,則可能是由環境變量引起的。
如果LC_CTYPE
像"*.UTF-8"
,一切都很好。 小心不是*.UTF-8
,它是"*.UTF-8"
,注意引號。 不知道它是否是一個錯誤,但只是沒有引號的UTF-8
將無法正常工作。
當您登錄到另一台計算機時,某些應用程序(如iTerm)將為您設置環境變量,有時會導致問題。
謝謝你們。
更新:這是我的意見,也許是錯的。
如果LC_CTYPE
是沒有引號的UTF-8
,操作系統將無法理解它,因此操作系統使用ASCII。 當中文有單詞時,python會嘗試將其解碼為unicode,沒有問題。 但是當有print
,python會嘗試將單詞編碼為LC_CTYPE
以將其打印到屏幕。 如果單詞的unicode大於127,DUANG!DUANG!DUANG,則有例外。
您可能正在使用Python 2,嘗試在腳本的最頂部添加以下代碼,看看它是否可行:
from __future__ import unicode_literals
並且不要忘記用sys
刪除你的2行。
默認情況下,這將在腳本中的任何位置啟用unicode字符串,因此任何得到的結果或顯式定義的字符串(即使沒有u
)如s="string"
都將是unicode字符串,因此將支持中文字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.