2010-11-24 79 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。