2012-03-29 131 views
26

我的節目就在命令行工作,但是當我運行它作爲一個cron作業崩潰的錯誤:UnicodeEncodeError僅作爲cron作業運行時,

UnicodeEncodeError: 'ascii' codec can't encode character 
u'\xa7' in position 13: ordinal not in range(128) 

它崩潰的聲明

​​

爲什麼只有當應用程序作爲cron作業運行時纔會發生這種情況?這怎麼解決?

我試圖(沒有幫助):

print unicode(title) 

Python是2.7

+1

見http://stackoverflow.com/questions/492483/setting-the-correct-encoding-when-piping-stdout-in-python – 2012-03-29 19:59:48

+0

我認爲這是同一個問題;當標準輸出是一個終端時,Python 2使用Unicode,但不是當它是一個管道時(因爲它將在一個cron作業中)。 – 2013-05-31 19:16:45

回答

4

旁白:這是一個常見的問題;因爲這可能是一個重複的問題。

2.7上的默認編碼是ascii
您需要爲程序的輸出提供編碼。
要使用的通用編碼是'utf8'。

所以,你會怎麼做,而不是:

print title.encode('utf8') 

下面就來檢查的默認編碼的一種方法:

import sys 

sys.getdefaultencoding() 
# -> 'ascii' 
+0

謝謝你的回答,但爲什麼只有在應用程序作爲cron工作運行時才能工作? – xralf 2012-03-29 19:55:09

+0

...根據提供的信息很難說。你可能會通過不同的輸入,例如。它是否有效不是問題。作爲一個負責任的程序員,你應該關心你的代碼使用非ASCII字符。 – bernie 2012-03-29 19:57:17

+0

實際上,該字符串已從SQlite數據庫中提取。它是TEXT類型,所以編碼爲UTF-8 http://sqlite.org/datatype3.html。也許Python在通過「%s%s」%(s1,s2) – xralf 2012-03-29 20:09:35

79

不,你可以把它簡單。在執行此腳本之前,只需定義PYTHONIOENCODING。就像這樣:

PATH=<your path> 
[email protected] 
PYTHONIOENCODING=utf8 

* * * * * /run/your/script 
+1

事實上,這是正確的答案。涼! :) – mac 2013-01-09 14:56:27

+14

如果我可以,我會給你+2。這狗屎一直在弄亂我的頭! – TTT 2013-07-04 09:17:40

+1

他說了什麼......兩年後,我在這裏,這節省了很多鍵盤被粉碎。 – mudda 2015-09-24 12:35:51