2017-06-08 14 views
0

具体的には、私の使用法であるかバグ/ドキュメントの問題であるかわからないので、同様の問題(https://github.com/Pylons/webob/issues/320)を投稿したwebobライブラリを使用していますUnicodeEncodeError djangoテストスイートとdjango URLを使用して実行されるコードの相違点

次のコードを取る:私はDjangoのシェルを経由して、これを実行すると、私が手

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 

を:パーとして、それを実行しているよう

>>> 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 

どこ私は最初の印刷から次取得Djangoのテスト・ケースのT:

例外が続く
/дÑлÑÑÐ½Ð¹Ñ 

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) 

私はしかし、両方の、これはおそらく私のテストスイートを持ついくつかの奇妙な構成であることを取得同じ環境(Djangoのmanage.py test vs manage.py shell)で同じメソッドを実行するので、私は何が違うのかを特定するのに苦労しています。また、他のユニコード関連のテストも問題なく実行しています。

ありがとうございました。

+0

私が使用して自分のローカル環境でこのエラーを再現しようとしました: - Pythonのインタラクティブシェル - 対話型シェル をジャンゴ - ジャンゴテスト これらのすべてがうまくいった。エンコードに関連するテスト固有の設定はありますか?同じ端末でこれらすべてのケースを実行していますか? – mateuszb

+0

確認のお返事ありがとうございます。私は '__future __。unicode_literals'を実際にインポートしていて、このポストで説明されている問題を修正していますが、このポストは実際にdjango webtestの依存関係を掘り下げています。全体的な問題は本当に解決されていません。私はWebtest自体が私が期待していない方法でエンコーディングするかもしれないと思う。私はこの問題を終わらせ、元の問題の範囲とよりよく一致するものを開くかもしれない。 – DanH

答えて

0

あなたは2つのオプションがあります:

代わりに、印刷の
  1. 使用ログが、それはすべての(だけでなく、ジャンゴ)アプリケーションにおけるベストプラクティスですが。
  2. または使用req.path.decodeは( 'UTF-8')
関連する問題