2017-06-08 1 views
0

Insbesondere verwende ich die webob Bibliothek, wo ich ein ähnliches Problem geschrieben (https://github.com/Pylons/webob/issues/320), da ich nicht sicher bin, ob es meine Verwendung ist, oder ein Bug/Dokumentation AusgabeUnicodeEncodeError Disparität zwischen Code über django Testsuite vs django URL laufen

Nehmen sie den folgenden Code ein:

from webob.request import BaseRequest 
req = BaseRequest.blank('http://example.com/%D0%B4%D1%8D%D0%BB%D1%8C%D1%8D%D0%BD%D0%B9%D1%82') 
print req.environ['PATH_INFO'] 
print req.path 

Wenn ich das über eine django Shell ausgeführt, erhalte ich:

>>> req = BaseRequest.blank('http://example.com/%D0%B4%D1%8D%D0%BB%D1%8C%D1%8D%D0%BD%D0%B9%D1%82') 
>>> print req.environ['PATH_INFO'] 
/дэльэнйт 
>>> print req.path 
/%D0%B4%D1%8D%D0%BB%D1%8C%D1%8D%D0%BD%D0%B9%D1%82 

Wo, wie es als par läuft t eines Falles Django Test ich folgendes aus dem ersten Druck erhalten:

/дÑлÑÑÐ½Ð¹Ñ 

von der Ausnahme:

File "/code/frontend/tests/test_views.py", line 55, in test_event 
    print req.path 
File "/virtualenv/frontend/local/lib/python2.7/site-packages/webob/request.py", line 485, in path 
    bpath = bytes_(self.path_info, self.url_encoding) 
File "/virtualenv/frontend/local/lib/python2.7/site-packages/webob/descriptors.py", line 68, in fget 
    return req.encget(key, encattr=encattr) 
File "/virtualenv/frontend/local/lib/python2.7/site-packages/webob/request.py", line 175, in encget 
    return val.decode(encoding) 
File "/virtualenv/frontend/lib/python2.7/encodings/utf_8.py", line 16, in decode 
    return codecs.utf_8_decode(input, errors, True) 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-16: ordinal not in range(128) 

ich, dass dies wahrscheinlich einige seltsame Konfiguration mit meinem Test-Suite ist jedoch beide über die gleiche Methode in der gleichen Umgebung laufen (Django manage.py test vs manage.py shell) und so bin ich schwer zu identifizieren, was anders ist. Wir führen auch eine Menge anderer Unicode-Tests ohne Probleme durch.

Vielen Dank für jedes Licht auf diese.

+0

Ich habe versucht, diesen Fehler in meiner lokalen Umgebung zu reproduzieren: - Python interaktiv Shell - django interaktiv Shell - django Tests Alle diese ging gut. Verfügen Sie über eine testspezifische Konfiguration für die Codierung? Führen Sie alle diese Fälle im selben Terminal aus? – mateuszb

+0

Danke für die Bestätigung, Es wurde an anderer Stelle darauf hingewiesen, dass ich "__future __. Unicode_literals" importiert habe, was wahr ist, und das Entfernen behebt das in diesem Beitrag beschriebene Problem, obwohl dieser Beitrag tatsächlich zu einer Abhängigkeit von django webtest führt Gesamtproblem ist nicht wirklich gelöst. Ich denke, Webtest selbst könnte Dinge auf eine Weise verschlüsseln, die ich nicht erwarte. Ich könnte dieses Problem schließen und eine bessere öffnen, die dem Umfang des ursprünglichen Problems entspricht. – DanH

Antwort

0

Sie haben 2 Möglichkeiten:

  1. Verwendung Protokollierung statt Druck ist es eine bewährte Methode in allen (nicht nur Django) -Anwendungen. mit
  2. oder benutzt req.path.decode ('utf-8')