jen*_*nlu 7 python django unicode logging decoding
完全被现在混淆了......我正在开发python/django并使用python日志记录.我的所有应用程序都需要unicode,我的所有模型都只有一个unicode()`,返回你'''方法.现在,在登录时,我遇到了一个非常奇怪的问题,它花了很长时间才发现我可以重现它.我已经尝试过Py 2.5.5和Py 2.6.4以及同样的事情.所以
每当我做一些直接记录时,如:
logging.debug(u'new value %s' % group)
Run Code Online (Sandbox Code Playgroud)
这称为模型组.unicode():返回unicode(group.name)
我的unicode方法看起来像这样:
def __unicode__(self):
return u'%s - %s (%s)' % (self.group, self.user.get_full_name(), self.role)
Run Code Online (Sandbox Code Playgroud)
即使group.name为XXX或ÄÄ(需要unicode),这也适用.但是当我出于某种原因想要记录一个集合,列表,字典,django-query集合以及例如列表中的各个实例可能是unicode或者我没有遇到麻烦...
每当group.name需要像Luleå(我的家乡)这样的unicode时,这会给我一个UnicodeDecodingError
logging.debug(u'new groups %s' % list_of_groups)
Run Code Online (Sandbox Code Playgroud)
通常我得到这样的错误:
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)')
Run Code Online (Sandbox Code Playgroud)
但是,如果我做的print list_of_groups一切在终端上变得很好
所以,我的理解是列表开始生成自己并对其所有元素执行repr()并返回它们的值 - 在这种情况下它应该是's2 | ÅÄÖÖ',然后列表呈现为(ascii,列表中的东西),然后当尝试将ascii解码为unicode时,这当然不起作用 - 因为列表中的一个元素已经回归当repr完成时,你自己就是一个'...'.
但是为什么这个????'
为什么每当我记录group.name之类的简单事物以及调用unicode方法时,事情都能正常处理并且unicode/ascii被正确处理.每当我变得懒惰并且想要记录列表时,无论何时遇到unicode字符,设置或其他事情都会变坏...
一些工作和失败的例子.如果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
Run Code Online (Sandbox Code Playgroud)
...我真的以为我抓住了Unicode ;-(
我不明白你不明白的是什么,如果你明白我的意思的话。你的中间段落:
\n\n\n\n\n所以,我的理解是列表开始生成自身并对它的所有元素执行 repr() 并返回它们的值 - 在这种情况下它应该是 's2 | \xc3\x85\xc3\x84\xc3\x96\xc3\x96',然后列表将自身呈现为 (ascii, the-stuff-in-the-list) 然后当尝试将 ascii 解码为 unicode 时,这将是当然不行——因为当 repr 完成时,列表中的一个元素已经返回了它自己的 u'...' 。
\n
准确解释了发生了什么 - 输出列表与打印其所有元素不同,因为在幕后它所做的只是对列表中的每个元素调用 repr() 。您可以记录一个列表理解,而不是输出原始列表,该列表理解在每个元素上调用 unicode,这将修复它。
\n| 归档时间: |
|
| 查看次数: |
6611 次 |
| 最近记录: |