亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

為什么只有在傳遞Python腳本的輸出時才會出現unicode錯誤?

為什么只有在傳遞Python腳本的輸出時才會出現unicode錯誤?

慕村9548890 2021-03-30 13:14:57
我使用的是2.7編寫的Python腳本(seafile-cli來自Seafile,這是文件同步解決方案)。我知道unicode在Python 2中是有問題的,但值得慶幸的是,在啟動腳本時正確處理了帶有變音符號的文件名:$ # seaf-cli status# Name  Status  Progressphotos  downloading     0/0, 0.0KB/sMa bibliothèque downloading     566/1770, 1745.7KB/svideos  downloading     28/1203, 5088.0KB/sdev-perso       downloading     0/0, 0.0KB/sdev-pro downloading     0/0, 0.0KB/s令我驚訝的是,在傳遞此輸出時,Python腳本崩潰UnicodeEncodeError:$ seaf-cli status | cat -# Name  Status  Progressphotos  downloading     0/0, 0.0KB/sTraceback (most recent call last):  File "/usr/bin/seaf-cli", line 845, in <module>    main()  File "/usr/bin/seaf-cli", line 841, in main    args.func(args)  File "/usr/bin/seaf-cli", line 649, in seaf_status    tx_task.rate/1024.0)UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8' in position 11: ordinal not in range(128)雖然我知道它Ma bibliothèque最初可能有問題(但沒有),但為什么管道傳輸會觸發回溯?那不是外殼的問題嗎?-此時輸出已“離開”腳本。
查看完整描述

1 回答

?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

Python知道如何處理程序內部的編碼,因為它使用了終端應用程序正在使用的任何編碼。


當你發送(管道)的輸出出來,它需要被編碼。這是因為使用管道實際上在應用程序之間發送字節流。每個管道都是單向通道,一側寫入數據,另一側讀取數據。


使用管道或重定向,您正在將數據發送到fd,該數據由另一個應用程序讀取。


因此,您需要確保Python在將數據發送出去之前正確地對數據進行編碼,然后輸入程序需要在處理之前對其進行解碼。


您可能還會發現此問題有用


更新:我將嘗試詳細說明編碼。我的答案的第一行是什么意思,因為您的Python解釋器使用特定的編碼,所以它知道如何將六進制值(實際字節)轉換為符號。


我的翻譯沒有;如果我嘗試從您的文本創建字符串-我收到錯誤消息:


>>> s = 'bibliothèque'

Unsupported characters in input

這是因為我在解釋器上使用了不同的編碼。


您的外殼使用與Python解釋器不同的編碼。當Python從程序中發送數據時,它使用默認編碼:ASCII。它無法使用ASCII轉換您的特殊字符(由十六進制值\ xe8顯示)。因此,您必須指定要使用的編碼,以便Python發送。



查看完整回答
反對 回復 2021-04-09
  • 1 回答
  • 0 關注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號