1

mysql(私の選択ではありません)を使用すると、すべてが、に設定されutf8ますutf8_general_ci。通常の場合、すべてがutf8幸せです。

ただし、sth like É’s、someをPOSTし、それを通常どおりデータベースに保存すると、結果のモデルフィールドをlatin1呼び出すことができません。.decode('utf-8')

>>> myinstance.myfield.decode('utf-8')
...

UnicodeEncodeError: 'ascii' codec can't encode character u'\xc9' in position 7: ordinal not in range(128)

としてデコードできるように、すべての受信データをクリーンアップしたいと思いますutf8

このようなアプローチを試みると、UnicodeEncodeError前払いが発生します。

編集:ダニエルの答えが示唆するように、この質問は誤解から来ています。latin1ここでは犯人ではありません。.decode('utf-8')ASCIIにエンコードしようとするため、のようなUnicodeでは失敗しu'팩맨'.decode('utf-8')ます。私が今知っていることを知って、この質問を残すのは私を苦しめます。しかし、多分それは誰かを助けるでしょう。データは実際にはユニコードとして戻ってくるので、私たちがやろうとしていたことは実際にはと同等だったと思いますu'É’'.decode('utf-8')

4

1 に答える 1

1

Django フィールドは常に Unicode です。それらを呼び出そうとdecodeするということは、Python がUTF-8 としてデコードしようとする前に、最初に ASCII にエンコードしようとすることを意味します。それは明らかにあなたが望むものではありません。私はあなたが実際にやりたいと思っていますmyinstance.myfield.encode('utf-8')

于 2012-08-09T13:17:39.500 に答える