2009-04-30 9 views
3

私のDjangoアプリケーションのデプロイされたバージョンを使用しているとき、私はlxmlのと奇妙な問題を抱えています。私はlxmlを使って自分のサーバから取り出した別のHTMLページを解析します。これは自分のコンピュータ上の開発サーバー上ではうまく動作しますが、なんらかの理由でサーバー上にUnicodeDecodeErrorと表示されます。デコードジャンゴで問題とlxmlの

('utf8', "\x85why hello there!", 0, 1, 'unexpected code byte') 

私は(mod_pythonのと)ApacheはLANG='en_US.UTF-8'で実行されていることを確認してきました。

私はこの問題のためにグーグルで試したし、正しく文字列をデコードするために異なるアプローチを試してみましたが、私はそれを把握することはできませんしました。あなたの答えで

、あなたは私の文字列がhelloか何かと呼ばれていることを仮定してもよいです。

答えて

3

utf-8でエンコードされた文字列ではありません。あなたはlxmlに渡す前にウェブページの解読を試みるべきです。ページを取得したときにhttpヘッダーを見て、そのページで問題が見つかった可能性があります。

+0

合意。 "\ x85why hello there!"を試してください。decode( "utf-8")。これにより、非Unicodeコード(\ x85)がUnicodeコードに変更されます。 "# - * - coding:utf-8 - * - "(引用符なし)を.pyファイルの先頭に追加する必要があるかもしれません。 – landyman

+0

これはおそらく、あなたが実際にはutf-8ではないバイト文字列を返すことによって引き起こされたと考えています。一般に、UTF-8文字列を作成すると主張している場合は、内部的にはUnicode型を使用し、ビットを入力する直前にutf-8にエンコードする必要があります。あなたがバイト列を一緒に作り直すなら、あなたはどこかでうんざりして、それを後でどこかで発見するでしょう。 FWIW、 "\ x85" == "#" –

-2

site.pyを変更すると、理想的なソリューションは、あなたのプログラムの開始時にこれを試していないので:「!\ x85whyこんにちは」

import sys 
reload(sys) 
sys.setdefaultencoding("utf-8") 
+0

おもしろいです!私のプログラムの最初のものがDjangoにあるのかどうか知りませんか? –

+0

lxml関連のコードを呼び出す前にこのコードを呼び出すと、問題が解決するはずです。 – ismail

+0

残念ながら、それは... –

関連する問題