簡體   English   中英

Raspberry Pi使用Python到mkdir

[英]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 ......”之類的異常。

我認為這是由環境變量引起的,我明天會試着弄清楚,謝謝你們:-)

您可以在目錄名稱之前添加ru前綴,例如

>>> import os
>>> os.mkdir(r'文件夾')
>>> os.mkdir(u'文件夾')

它會為我創建'xxx /文件夾/'。

希望能幫助到你。

setdefaultencoding適用於printwrite - 嘗試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搜索有關localelocales更多信息

最后,我知道出了什么問題:-)

唯一應該做的就是將LC_CTYPE環境變量設置為"***.UTF-8"

我在PC上用英語安裝了Debian,在另一台PC上安裝了Debian用中文。 我有一個vps(Ubuntu英文版),我有一台Mac(Mac OS X英文版)。 這就是我得到的 在此輸入圖像描述

如您所見,當LC_CTPPE"***.UTF-8" ,我可以輸入中文,shell可以顯示中文。 但是當它是別的東西時,我的程序會粉碎。

摘要:

  1. 如果代碼可以在您的計算機上正常運行,但不能在另一台計算機上運行,​​則可能是由環境變量引起的。

  2. 如果LC_CTYPE"*.UTF-8" ,一切都很好。 小心不是*.UTF-8 ,它是"*.UTF-8" ,注意引號。 不知道它是否是一個錯誤,但只是沒有引號的UTF-8將無法正常工作。

  3. 當您登錄到另一台計算機時,某些應用程序(如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM