完全被现在混淆了......我正在开发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) …Run Code Online (Sandbox Code Playgroud)