Django:追踪DjangoUnicodeDecodeE

2024-05-16 23:54:57 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试呈现模板时,我遇到以下错误:

DjangoUnicodeDecodeError: 'utf8' codec can't decode bytes in position 26-27: invalid data. You passed in '\xce\x88\xce\xbe\xce\xbf\xce\xb4\xce\xb1 \xcf\x83\xcf\x84\xce\xb7\xce\xbd \xce\xb5\xcf\x81\xce\xb3\xce...' (<type 'str'>)

这个模板相当大,也很复杂,所以我希望能得到一些关于如何追踪这到底是从哪里来的提示。在

一些可能有用的事实:

  • 模板通常是unicode友好的;我们通过它显示相当数量的unicode数据
  • 数据来自的mysql表采用utf8编码
  • 这是一个奇怪的问题:当使用相同的代码库和相同的生产数据时,这个错误不会出现在我的登台服务器上。这个设置非常类似于生产服务器:python2.5.1、Django-1.1.1、mysql 5.0.38、ubuntu。在

我不确定到底在哪里寻找编码错误的数据,任何提示或指针都将不胜感激。在


Tags: 数据in服务器模板编码错误mysqlunicode
3条回答

万一有人和我有类似的情况: 最近,我将MySQL表改为使用排序规则utf8_bin,并遇到了相同的问题。我发现在staging中我有MySQL python1.2.3。升级到1.2.4为我解决了这个问题。我使用的是python2.7,Django1.4.2。在

在某个地方,你正在截断一个字符串,但是你是在一个str而不是unicode上进行的,所以你最终将一个UTF-8字符序列一分为二。始终对unicode执行文本操作,从不str。在

异常报告的是26个字节的有效UTF-8后跟'\xce...'

在我看来,你的代码或Django代码中的某个软件正在做这样的事情:

def too_big_display(strg, maxlen):
    return strg[:maxlen-3] + "..."

在你的例子中用too_big_display(your_Greek_text_encoded_in_utf8,30)调用它

所以你看到了一个次要错误。。。\xce.不是有效的UTF-8。在

我建议您仔细查看回溯,您应该向我们展示,并且仍然可以通过编辑您的问题)来查看是否存在主要错误的证据。如果没有,请仔细检查您的代码是否有这样的截断。在

相关问题 更多 >