Django:追踪DjangoUnicodeDecodeError错误

时间:2010-11-24 18:33:11

标签: python django unicode

尝试渲染模板时,我收到以下错误:

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编码
  • 这是一个奇怪的:使用相同的代码库和相同的生产数据时,我的登台服务器上不会显示错误。该设置与生产服务器非常相似:Python 2.5.1,Django-1.1.1,mysql 5.0.38,ubuntu。

我不确定在哪里查找编码错误的数据,任何提示或指针都会受到赞赏。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

异常报告的内容是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。

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

答案 2 :(得分:0)

如果有人像我一样有类似的情况: 我最近更改了MySQL表以使用collat​​ion utf8_bin并遇到了同样的问题。我发现在升级中我有MySQL-python 1.2.3。升级到1.2.4解决了我的问题。我使用的是python2.7,Django1.4.2。