1

多くの人がうまくいけば関係することができるように、このエンコーディングの問題は私を精神的に駆り立てています。これについて少し光を当てていただければ幸いです。

最終的な目標は、ターミナルとcronの両方から、およびcronから。を使用して同じscript.pyを実行できるようにすること> stdout.txtです。そして言うまでもなく、私は深刻なエンコーディングの問題を抱えています。

私のscript.pyはターミナルから正常python script.py
に実行されます:エラーをスローしますが、ターミナルから実行すると:python script.py > stdout.txt
どちらの方法でも、cronで実行すると同じエラーがスローされます。

crontab -eルートとして入力されたPythonスクリプトがあります。

これは私のscript.pyヘッダーです:

#!/usr/bin/python
# -*- coding: utf-8 -*-

これは私のcronエントリです:

* * * * * python /home/ubuntu/parrot/script.py > /home/ubuntu/parrot/stdout.txt

これは私のstdout.txt(関連部分)です:

Unexpected error!  (<type 'exceptions.UnicodeDecodeError'>, UnicodeDecodeError('ascii', 'blabla some weird text n\xc3\xa5r end', 54, 55, 'ordinal not in range(128)')) 

これはターミナルからの私の環境です(関連部分):

LANG=en_US.UTF-8

これはcron(関連部分)からの私のenvです:

LANG=en_US.UTF-8

これは、エラーをスローするscript.pyの(最初の)行です。

print 'Posting @%s: %s' % (statusObj.user.screen_name.encode('ascii', 'replace'), statusObj.text.encode('utf-8', 'replace'))

編集: sys.getdefaultencoding()戻り値ascii

どんな助けでも大歓迎です!

4

1 に答える 1

1

を制御できる場合はstatusObj、データがオブジェクトに解析されている関連コードを確認し、入力を可能な限りクリーンにするようにしてください。

文字列をエンコードする前に、文字列がUnicodeにデコードされていることを確認する必要があります。

そうでない場合は、試すことができます:

# try to get the string into unicode
screen_name = unicode(statusObj.user.screen_name) 
post = unicode(statusObj.text) # probably an error here?
output_str = u"Posting @{name}: {post}".format(name=screen_name, post=post)
print output_str.encode("utf8", "replace") # encode the unicode string on 
于 2012-08-07T01:11:07.653 に答える