2010-11-24 44 views
1

在试图呈现一个模板,我发现了以下错误:Django的:跟踪误差DjangoUnicodeDecodeError

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。

我不确定在哪里寻找严重编码的数据,任何提示或指针将不胜感激。

回答

4

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

+0

Aaah,很好的建议,当我回到电脑前时会试一试。 – Parand 2010-11-24 19:02:06

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。

我建议你仔细看通过回溯你应该向我们展示,而且还可以通过编辑您的问题),看看是否有初级错误的任何证据。如果不是,请仔细检查您的代码以进行截断。

0

如果有人有类似的情况,像我的: 我最近更改了一个MySQL表使用排序规则utf8_bin并遇到同样的问题。我发现在分期中我有MySQL-python 1.2.3。升级到1.2.4解决了我的问题。我正在使用python2.7,Django1.4.2。