2012-03-06 12 views
2

Googleからインポートしたデータを処理するDjangoアプリケーションに問題があります(gdata API経由)。基本的に、Googleからインポートされたすべてのテキストは、ページにエンコードの問題を表示しています(「セアラ州」は「セア州」として表示されています)。DjangoとMySql - エンコーディングの難易度

mysqlデータベース上のencondingはUFT-8にするように設定され、すべてのテキストは、私のクエリに正しく表示されているが、私はいくつかのDjangoのシェルを試してやった後の事は少し奇妙な取得するために開始しました:

私は」手でこれらのテキストのいずれかを変更しまし今では問題をコード化することなく、ページに示しているが、シェルによってエコーされたテキストがまだエンコーディングの問題を持つものと同様である:

>>> v1 
<Video: São Paulo is awesome!> 
>>> v1.title 
u'S\xe3o Paulo is awesome!' 
>>> v2 
<Video: Ceará State> 
>>> v2.title 
u'Cear\xc3\xa1 State' 

そして私は印刷しようとした場合テキスト:

print v1.title 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe3' in position 1: ordinal not in range(128) 

何が起こっているか、どのように修正できますか?ありがとうございました。

EDIT:

私はよりよい解決策はありませんしながら、私の問題を処理するために非常にダムの機能を書いた:

def normalize(s): 
    return s.encode('utf-8').replace('á', 'á').replace('ó', 'ó').replace('ç', 'ç').replace('ã', 'ã').replace('Ã', 'í') 

EDIT 2: 

問題を使用するように設定しなかったこれはApacheによって引き起こされましたUFT- 8。

+1

としてこれを試しながら、あなたが適切にあなたがエラーを取得している理解していれば、あなたはテンプレートでこのデータを表示する必要がありますか? – Ahsan

+0

Ahsan - そうでした。アクセントを修正するために私が手で変更したタイトルは正しく表示され、他はアクセントを置き換えて奇妙な文字でうんざりしています。 – Raphael

+0

@Ahsan - シェルのv1のユニコード表現が正しいことに注意してください: v2のユニコード表現が崩れていました: Raphael

答えて

1

私は貝にタイトルを印刷するので、私はあなたのシェルはこれらのエンコーディングをサポートしていないと思います

print v1.title.encode('utf-8') 
+0

私のエラーはありませんシェル内でのみ使用できます。テキストもテンプレートに間違って表示されています。私はこの機能を試しましたが、文字列をさらに乱しました。 – Raphael

+0

私は問題を処理するために非常にダム関数に取り組んでいます:def normalize(s): return s.encode( 'utf-8')。replace( 'á'、 'á')。replace( '³' – Raphael

+0

google apiがこれら以外のものを返した場合はどうなりますか?( 'Ã' '、'í ')を置き換えます('Ã ''、 'ç')。これらの人にとってはうまくいかないでしょう。あなたが 'A'などのような非アスキー文字を無視すると解決策になるかもしれません。 – Ahsan