今では完全に混乱しています...私はpython/djangoで開発しており、pythonロギングを使用しています。私のアプリはすべて Unicode を必要とし、すべてのモデルにはUnicode ()`, return u'..' メソッドのみが実装されています。ログを記録しているときに、再現できることを発見するのに長い時間がかかったという、本当に奇妙な問題に遭遇しました。Py 2.5.5 と Py 2.6.4 の両方を試しましたが、同じことです。そう
次のような簡単なロギングを行うときはいつでも:
logging.debug(u'new value %s' % group)
これはモデル グループを呼び出します。unicode (): unicode(group.name) を返します
私のユニコードメソッドはすべて次のようになります。
def __unicode__(self):
return u'%s - %s (%s)' % (self.group, self.user.get_full_name(), self.role)
これは、group.name が XXX または ÄÄÄ (ユニコードが必要) の場合でも機能します。しかし、何らかの理由でセット、リスト、辞書、django-query セット、および個々のインスタンスをログに記録したい場合、たとえばリストがユニコードであるかどうかにかかわらず、問題が発生します...
したがって、これにより、group.name が Luleå (私の故郷) のような Unicode を必要とするたびに、UnicodeDecodingError が返されます。
logging.debug(u'new groups %s' % list_of_groups)
通常、次のようなエラーが表示されます。
Exception Type: UnicodeDecodeError
Exception Value: ('ascii', '<RBACInstanceRoleSet: s2 | \xc3\x84\xc3\x96\xc3\x96\xc3\x85\xc3\x85\xc3\x85 Gruppen>]', 106, 107, 'ordinal not in range(128)')
しかし、私が行うとprint list_of_groups
、端末ですべてがうまくいきます
したがって、私の理解では、リストはそれ自体を生成し始め、そのすべての要素に対して repr() を実行し、値を返します。この場合は 's2 | ÅÄÖÖ' の場合、リストは (ascii, the-stuff-in-the-list) として表示され、asciiを Unicode にデコードしようとすると、もちろん機能しません。リスト内の要素の 1 つが返されたためです。再現が行われたとき、それ自体のu'...'。
でもなんでこれ????´
そして、group.nameなどの単純なものをログに記録し、ユニコードメソッドが呼び出されるたびに、物事が機能し、ユニコード/ asciiが正しく処理されるのはなぜですか。怠惰になってリストをログに記録したいときはいつでも、ユニコード文字に遭遇するたびにセットやその他のものがうまくいきません...
うまくいく例と失敗する例をいくつか。group.name
モデルフィールドに移動してgroup
呼び出した場合__unicode__()
logging.debug("1. group: %s " % group.name) # WORKS
logging.debug(u"2. group: %s " % group) # WORKS
logging.debug("3. group: %s " % group) # FAILS
logging.debug(u"4. group: %s " % group.name) # WORKS
logging.debug("5. group: %s " % group.name) # WORKS
...そして、私は本当に Unicode を把握していると思っていました ;-(