2016-05-04 9 views
1

Django 1.3.xをDjango 1.4.xにアップグレードするのに苦労しています。Django 1.3から1.4へのアップグレードでUnicodeの問題が発生する

print unicode("Nº") 

1.3細かい動作しますが、1.4は、伝説的なデコードエラーを与える:

'ascii' codec can't decode byte 0xc2 in position 1: ordinal not in range(128) 

なぜそれがある?1.4バージョンでの開発サーバは、次のコードを許可していませんか。どのようにデコードが処理されるかの設定はありますか?

注:実際のレガシーアプリケーションでは、非ユニコード文字列をunicode関数に送信する大量のコードが存在します。

+0

アップグレードする場合は、django 1.8にアップグレードする必要があります.Django 1.4は、昨年10月からサポートされていません。 1.4にアップグレードしても、遅かれ早かれ1.8にアップグレードしなければならないので、2倍の労力を要します。 – e4c5

+0

実際、小さなステップでそれをやっていますが、これを行う方が簡単です。 –

答えて

1

おそらくこれにはいくつかの問題があります。最初の文字はprint unicode("string")で、その文字列をストレートの非Unicode文字列(これはPython 2.7と仮定します)として受け取ります。それをprint unicode(u"Nº")に変更しても問題ありませんか?

その間に、.encode('UTF-8')/decode('UTF-8')が必要な場所でお手伝いください。 Python 2でのUnicodeの扱いはちょっと面倒です。さまざまなPyConsでユニコードに関するたくさんの話があり、その多くはYouTubeに投稿されています。それの音から

をあなたは時間を持っているか、それがhttps://www.youtube.com/watch?v=sgHbC6udIqcを見て価値があるとhttps://www.youtube.com/watch?v=Mx70n1dL534場合はあなただけを通過し、あなたが扱っているすべての文字列のすべてのソースは、デコードを経由してUnicodeオブジェクトに変換されていることを確認する必要があります( 'utf-8')またはエンコードが何であれ、できるだけ早く。あるいは、Djangoの後のバージョンに直接スキップすることができれば(この時点では1.8より前のものはすべてゼロのサポートを持っています)、2to3のようなものをPython3に変更することができ、副作用としてこれらのタイプをたくさん取り除くことができます問題の

+0

u "Nº"に変更することは実際にはうまくいきますが、u ''バージョンでレガシーシステムのすべての文字列を変更するのは少し危険です。私の視点から見れば奇妙なことは、ウェブサーバーのバージョンをデコードの振る舞い(私はフレームワークではなく言語自体の役割を果たすはずです)に変更する理由です。不思議にも、 'gunicorn_django'を使ってアプリケーションを実行してもエラーは発生しません。私は今、これらのビデオを見て、感謝します。 :) –

関連する問題