2012-03-29 3 views
26

내 프로그램은 바로 명령 줄에서 작동하지만, 나는 cron 작업으로 실행할 때 오류에 충돌 :UnicodeEncodeError 만 크론 작업으로 실행할 때

그것은 문에 충돌
UnicodeEncodeError: 'ascii' codec can't encode character 
u'\xa7' in position 13: ordinal not in range(128) 

print title 

왜 응용 프로그램이 cron 작업으로 실행될 때만 이런 현상이 발생합니까? 이 문제를 어떻게 해결할 수 있습니까?

나는 (아무 도움으로) 시도 :

print unicode(title) 

파이썬을 제외하고 2.7

+1

이 http://stackoverflow.com/questions/492483/setting-the-correct-encoding-when-piping-stdout-in-python –

+0

를 참조하십시오 나는 동일한 문제라고 생각; 파이썬 2는 stdout이 터미널이지만 파이프 일 때 유니 코드를 사용합니다 (cron 작업에서와 같이). –

답변

4

입니다 : 이것은 일반적인 문제입니다; 이와 같은 질문은 아마도 중복 된 질문 일 것입니다.

2.7의 기본 인코딩은 ascii입니다.
프로그램 출력물의 인코딩을 제공해야합니다.
사용할 일반적인 인코딩은 'utf8'입니다.

그래서 대신 할 거라고 :

print title.encode('utf8') 

가 여기에 기본 인코딩을 확인하는 하나 개의 방법 :

import sys 

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

답변 해 주셔서 감사합니다.하지만 앱이 cron 작업으로 실행될 때만 작동하는 이유는 무엇입니까? – xralf

+0

... 제공된 정보를 바탕으로 말하기가 어렵습니다. 다른 입력을 전달할 수도 있습니다. 그것이 작동하는지 여부는 문제가 아닙니다. 책임감있는 프로그래머라면 비 ASCII 문자로 작업하는 코드에 신경 써야합니다. – bernie

+0

실제로 문자열은 SQlite 데이터베이스에서 가져 왔습니다. TEXT 유형이므로 UTF-8로 인코딩되었습니다. http://sqlite.org/datatype3.html. 어쩌면 파이썬이 "% s % s"% (s1, s2)를 통해 다른 문자열과 결합했을 때 그것을 바꿨을 것입니다. – xralf

79

아니, 당신은 간단하게 할 수 있습니다. 이 스크립트를 실행하기 전에 PYTHONIOENCODING을 정의하십시오. 이처럼 :

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

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

사실이 sys.stdout.encoding 정답입니다. 시원한! :) – mac

+14

내가 줄 수 있다면 +2. 이 똥은 내 머리를 망치고있어! – TTT

+1

그가 말한 바는 ... 2 년 후, 나는 키보드를 많이 구해 냈다. – mudda

관련 문제