为什么Django管理员尝试将字符串编码为ASCII而不是Unicode?或者这个错误是否与它看起来不同?

Mon*_*lik 3 python django unicode encoding django-admin

我有以下错误:

/ admin/results_cop/copsegmentresult上的TemplateSyntaxError /

在渲染时抓住异常:('ascii','ISU欧洲花样滑冰锦标赛2009:高级女士们:短节目 - 2. Susanna P\xc3\x96YKI\xc3\x96',98,99,'序数不在范围内( 128)')

不呈现的字符串片段是:PÖYKIÖ

我没有得到的是为什么Django试图将字符串呈现为ASCII,为什么不是UTF-8?

编辑1:

我忘了问 - 我也很想知道如何摆脱错误;)

编辑2:

Bobince的答案是正确的:)我有类似的东西:

def __unicode__(self):
    return "%s %s" (self.foo, self.bar)
Run Code Online (Sandbox Code Playgroud)

bob*_*nce 7

我猜你要求Django渲染一个字节串.不,u在这开头:

'ISU European Figure Skating Championships 2009: Senior Ladies Ladies: Short Program - 2. Susanna P\xc3\x96YKI\xc3\x96'
Run Code Online (Sandbox Code Playgroud)

所以Django可能会尝试将其编码为页面的编码,大概是UTF-8.但字节字符串不能直接编码; 它们必须首先是Unicode字符串.Python本身使用通常的默认编码执行此转换步骤ascii.

>>> 'P\xc3\x96YKI\xc3\x96'.encode('utf-8')
UnicodeDecodeError
Run Code Online (Sandbox Code Playgroud)

因此,您需要做的是在将字节字符串发送到模板之前,通过UTF-8解码将其转换为Unicode字符串.它来自哪里?通常,您应该将应用程序中的所有内容字符串保留为Unicode字符串.