第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試使用 ftplib 和 storbinary ==> UnicodeEncodeError

嘗試使用 ftplib 和 storbinary ==> UnicodeEncodeError

忽然笑 2022-06-14 17:32:52
我的代碼存在以下問題:我正在嘗試將“png”圖像存儲到 FTP 服務(wù)器(網(wǎng)站的屏幕截圖)中。我正在使用 ftplib 和 selenium(使用 webdriver):driver.get(<someURL>)screenshot = driver.save_screenshot(driver.title + '.png')ftp.storbinary("STOR <PathToServer>" + driver.title + '.png', open(driver.title + '.png', 'rb'))這種方法適用于網(wǎng)站是用拉丁字符編寫的,問題是圖像可能是位于泰國、中國或埃及的網(wǎng)站的屏幕截圖。在這種情況下,該行:open(driver.title + '.png', 'rb')返回臭名昭著的錯誤:UnicodeEncodeError: 'latin-1' codec can't encode character '\u1ec7' in position 60: ordinal not in range(256)我知道 storbinary 只接受二進制數(shù)(正如該方法的名稱所暗示的那樣)。但是,我不明白的是如何“編碼” png 以使其不會導(dǎo)致該錯誤,從而可以成功地將其存儲到 FTP 服務(wù)器中。非常感謝你!任何幫助、評論或見解,將不勝感激。最好的!
查看完整描述

1 回答

?
繁花不似錦

TA貢獻1851條經(jīng)驗 獲得超4個贊

事實是在運行的計算機程序中表示的文本和存儲在文件中的文本,文件名和數(shù)據(jù)庫是兩個不同的東西。人們可以將前者視為一組字符,而不必關(guān)心它們在內(nèi)部是如何表示的。另一方面,要將文本存儲在文件系統(tǒng) DB 中,通過網(wǎng)絡(luò)傳輸,文本必須以字節(jié)表示。這種將程序運行時擁有的“純”文本轉(zhuǎn)換為字節(jié)表示的過程稱為“編碼”。為了更好地理解這一點,我建議閱讀這篇文章。


Python 3,無論是核心語言還是庫,在對文本進行任何 I/O 時都會嘗試自動選擇正確的文本編碼。在您的情況下,它為目標(biāo)服務(wù)器中的文件名選擇了“l(fā)atin1”編解碼器。


Latin1 僅限于 200 多個有效字符,不能表示大量字符或字形 - 任何非西方語言字符,甚至一些西方語言字符,例如 ?、?、?,都無法用它表示.


建議是在讓 Python 這樣做之前對名稱進行手動編碼,因為這樣我們就可以控制如何處理目標(biāo)編碼中不存在的字符。由于庫方法.strobinary(


因此,為了保留 latin1 中不存在的有關(guān)您的字符的信息,我建議使用轉(zhuǎn)義編碼 - 其他選項將替換為“?” 或忽略,只是抑制所有字符:


filename = driver.title.encode("latin1", errors="xmlcharrefreplace").decode("latin1") + ".png"

screenshot = driver.save_screenshot(filename)

ftp.storbinary("STOR <PathToServer>" + filename, open(filename, 'rb'))


查看完整回答
反對 回復(fù) 2022-06-14
  • 1 回答
  • 0 關(guān)注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號