Pythonの開発者として、私は何年もPythonのUnicodeの問題を抱えていました。 しかし、今私はナッツを運転する状況があり、私はそれを自分で解決することはできません。Django&Suds:QuerySets使用時のUnicodeEncodeError
: それはすでに私のセットアップはいくつかのデータを引き出し、Djangoのデータベースにそれを探して、(泡を使用して)SOAP経由でリモートシステムに接続する小さなDjangoアプリケーション..ですrecherches含めて、今1日を取りました
from myapp.models import Customer
client = suds.client.Client(...)
customer = client.service.getCustomerByEmail('[email protected]')
type(customer.email): <class 'suds.sax.text.Text'>
customer_exists = Customer.objects.filter(email=customer.email)
今すぐお客様のメールアドレスは次のようにDjangoは例外を発生させることができますドイツ語のウムラウトのü、があります。
Traceback (most recent call last):
File "run_anatomy_client.py", line 19, in <module>
print client.main()
File "/Users/user/Documents/workspace/Wawi/application/myapp/client.py", line 282, in main
if not Customer.objects.filter(email=customer.email.encode('latin1')):
File "/Users/user/Documents/workspace/Wawi/application/myapp/client.py", line 76, in sync_customer
if not customer_exists:
File "/Users/user/Documents/workspace/Wawi/pyenv/lib/python2.7/site-packages/django/db/models/query.py", line 113, in __nonzero__
iter(self).next()
File "/Users/user/Documents/workspace/Wawi/pyenv/lib/python2.7/site-packages/django/db/models/query.py", line 107, in _result_iter
self._fill_cache()
File "/Users/user/Documents/workspace/Wawi/pyenv/lib/python2.7/site-packages/django/db/models/query.py", line 772, in _fill_cache
self._result_cache.append(self._iter.next())
File "/Users/user/Documents/workspace/Wawi/pyenv/lib/python2.7/site-packages/django/db/models/query.py", line 273, in iterator
for row in compiler.results_iter():
File "/Users/user/Documents/workspace/Wawi/pyenv/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 680, in results_iter
for rows in self.execute_sql(MULTI):
File "/Users/user/Documents/workspace/Wawi/pyenv/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 735, in execute_sql
cursor.execute(sql, params)
File "/Users/user/Documents/workspace/Wawi/pyenv/lib/python2.7/site-packages/django/db/backends/util.py", line 43, in execute
logger.debug('(%.3f) %s; args=%s' % (duration, sql, params),
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 28: ordinal not in range(128)
私はすでにエンコード()、デコード()と共演し、ソースファイルのコーディングを変更データベースl次のように現在見えている、ayout:
mysql> show variables like '%character%';
+--------------------------+-----------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /opt/local/share/mysql5/mysql/charsets/ |
+--------------------------+-----------------------------------------+
8 rows in set (0.00 sec)
奇妙なことがある - 私は、トレースポイントを設定し、Djangoのシェルでまったく同じ行を実行した場合、エンコードを使用した場合、それだけで正常に動作します():
(Pdb) Customer.objects.filter(email=customer.email)
*** UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 28: ordinal not in range(128)
(Pdb) Customer.objects.filter(email=customer.email.encode('utf-8'))
[]
私はすべてのヒントに感謝するだろう。..
こんにちは、ユニコード(customer.email、 'iso8859-1')を試すことができます、それが助けてくれたら教えてください... – Jingo
Th Customer.objects.filter(email = unicode(customer.email、 'iso8859-1')): TypeError:Unicodeのデコードがサポートされていません –
問題を解決できましたか?私は同じ問題に直面しているように見える – Fedor