2010-11-24 8 views
1

を追跡:ジャンゴ:私は次のエラーを取得していますテンプレートをレンダリングしようとしているとき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されます。我々はそれ
  • を介してデータから来ているMySQLのテーブルをUnicodeデータのかなりの量をUTF8エンコードをしている表示
  • これは
  • 奇妙1:同じを使用しているときにエラーが私のステージングサーバー上では表示されません。コードベースと同じ生産データを提供します。設定はプロダクションサーバと非常に似ています:Python 2.5.1、Django-1.1.1、mysql 5.0.38、ubuntu。

ひどくエンコードされたデータを正確に調べる場所がわからないので、ヒントやポインタを参考にしてください。

答えて

4

文字列を切り捨てていますが、unicodeの代わりにstrで実行しているため、UTF-8文字シーケンスを半分に分割してしまいます。 unicodeには常にテキスト操作を実行し、決してstrを実行しないでください。

+0

私はコンピュータの前に戻ったときに素晴らしい提案をしてくれます。 – Parand

+0

@パランド:結果は.......? –

+0

イグナシオは死んでいた。私はタイトルを切り詰めるタグを書いて、unicode()の代わりにstr()を使ってタグパラメータを文字列に変換していました。それをunicode()に切り替え、問題が解決しました。 – Parand

1

何例外によって報告されたこと'\xce...'

続い有効なUTF-8の26バイトで、それはあなたのコード内または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

誰かが似たような状況にある場合: 私は最近、照合utf8_binを使用するようにMySQLテーブルを変更し、同じ問題に遭遇しました。ステージングで私はMySQL-python 1.2.3を持っていることがわかりました。 1.2.4へのアップグレードは私の問題を解決しました。私はpython2.7、Django1.4.2を使用しています。

関連する問題