2011-12-08 20 views
2

Twitterからツイートを取得し、GAEのxmpp APIを使用してGTalk経由で送信しようとしています。私は非常に奇妙な問題があります。Strange GAE Pythonエンコーディングの問題

私はを持っています。はTwitterからデータを取得しました。エラーは、XMPP APIを使用して送信すると発生します。トレース情報によれば、エラーは私のものではなく、GAEコードで発生しました。特定のツイートをPython2.5でテストしたところ、ツイートのテキストを正しく処理することができ、ツイートには英語の文字のみが含まれていました。

ERROR 2011-12-08 14:29:54,200 dev_appserver.py:2700] Exception encountered handling request 
Traceback (most recent call last): 
    File "/home/google_appengine/google/appengine/tools/dev_appserver.py", line 2641, in _HandleRequest 
    self._Dispatch(dispatcher, self.rfile, outfile, env_dict) 
    File "/home/google_appengine/google/appengine/tools/dev_appserver.py", line 2528, in _Dispatch 
    base_env_dict=env_dict) 
    File "/home/google_appengine/google/appengine/tools/dev_appserver.py", line 616, in Dispatch 
    base_env_dict=base_env_dict) 
    File "/home/google_appengine/google/appengine/tools/dev_appserver.py", line 1592, in Dispatch 
    self._module_dict) 
    File "/home/google_appengine/google/appengine/tools/dev_appserver.py", line 1517, in ExecuteCGI 
    logservice_stub._flush_logs_buffer() 
    File "/home/google_appengine/google/appengine/api/logservice/logservice_stub.py", line 71, in _flush_logs_buffer 
    logservice.logs_buffer().flush() 
    File "/home/google_appengine/google/appengine/api/logservice/logservice.py", line 228, in flush 
    self._lock_and_call(self._flush) 
    File "/home/google_appengine/google/appengine/api/logservice/logservice.py", line 112, in _lock_and_call 
    return method(*args) 
    File "/home/google_appengine/google/appengine/api/logservice/logservice.py", line 260, in _flush 
    apiproxy_stub_map.MakeSyncCall('logservice', 'Flush', request, response) 
    File "/home/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 94, in MakeSyncCall 
    return stubmap.MakeSyncCall(service, call, request, response) 
    File "/home/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 308, in MakeSyncCall 
    rpc.CheckSuccess() 
    File "/home/google_appengine/google/appengine/api/apiproxy_rpc.py", line 156, in _WaitImpl 
    self.request, self.response) 
    File "/home/google_appengine/google/appengine/api/apiproxy_stub.py", line 87, in MakeSyncCall 
    method(request, response) 
    File "/home/google_appengine/google/appengine/api/logservice/logservice_stub.py", line 309, in _Dynamic_Flush 
    new_app_logs = self.put_log_lines(group.log_line_list()) 
    File "/home/google_appengine/google/appengine/api/logservice/logservice_stub.py", line 321, in put_log_lines 
    return _run_in_namespace(self._put_log_lines, lines) 
    File "/home/google_appengine/google/appengine/api/logservice/logservice_stub.py", line 93, in _run_in_namespace 
    return f(*args) 
    File "/home/google_appengine/google/appengine/api/logservice/logservice_stub.py", line 330, in _put_log_lines 
    message=app_log.message()) 
    File "/home/google_appengine/google/appengine/ext/db/__init__.py", line 945, in __init__ 
    prop.__set__(self, value) 
    File "/home/google_appengine/google/appengine/ext/db/__init__.py", line 599, in __set__ 
    value = self.validate(value) 
    File "/home/google_appengine/google/appengine/ext/db/__init__.py", line 2696, in validate 
    value = self.data_type(value) 
    File "/home/google_appengine/google/appengine/api/datastore_types.py", line 1138, in __new__ 
    return super(Text, cls).__new__(cls, arg, encoding) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xca in position 135: ordinal not in range(128) 
+0

'' ascii 'コーデックは0xcaをデコードできません。 – Kjuly

+0

やや問題ありません:問題がありますtwitterとGAE afaikでTwitterはドメイン単位で調整しています。もしあなたがappspotから操作しているなら、appspotのtwitterと話している他のアプリケーションと限られたリソースを共有しています。まだそれが当てはまるかどうかわからない。 –

+0

効果は同じですが、ドメインではなくIPで絞り込みます.App Engineはプールを一緒にリクエストし、本当にビジーなアプリとして扱われます。これが問題の場合は、おそらくUnicodeDecodeErrorの代わりにDownloadErrorを取得します。 –

答えて

1

申し訳ありませんが、みんな...誤警報:(

問題の原因は、Googleのロギングサービスのみ「ASCII」コーデックを受け入れ、私はローカルにXMPPサービスをテストする場合、それが使用していることです

解決策は、テスト中にstr.encode( 'ascii'、 'ignore')を使用するか、単にそのエラーを無視することです。 。

1

このエラーは、マルチバイト文字を7ビットASCII文字列に格納しようとしたことを意味します。これを避けるには、HTTP応答本体をUnicodeとして渡します。より具体的なアドバイスが必要な場合は、コードを投稿してください。

+0

"7ビットASCII文字列"または "マルチバイト文字"ではありません。つまり、ASCIIを使用して文字列をデコードしようとしましたが、その文字列にはASCII範囲外のコードポイントが含まれています。 –

関連する問題