3

dumpdataDjango のコマンドを使用して JSON ファイルを作成しました。でデータを再度インポートするとsyncdb、Python が例外をスローします。

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

これは JSON ファイルに関連している必要があります (私の models.py ではありません) --no-initial-data。今、エンコーディングがどこで混同されるのだろうか。

JSON ファイルには、'Garc\u00eda Ram\u00f3n'. Python で実際の文字列を UTF-8 または Latin1 で手動でエンコードすると、次のようになります。

>>> ustring = u'García Ramón'
>>> ustring.encode('utf-8')
'Garc\xc3\xada Ram\xc3\xb3n'
>>> ustring.encode('latin1')
'Garc\xeda Ram\xf3n'

syncdb が dumpdata の出力でチョークするのはなぜですか? そして、これを防ぐために何ができますか?ソース DB とターゲット DB (それぞれ MySQL と PostgreSQL) の両方が UTF-8 を使用します。

更新: XML をシリアル化形式として使用し、適切なエンコーディング宣言を使用すると、まったく同じことが起こります。

<?xml version="1.0" encoding="utf-8"?>
<django-objects version="1.0">
[...]
<field type="CharField" name="last_name">García Ramón</field>

Django がどの時点でascii コーデックを使用してエンコードü(= ) しようとするか (およびそれを変更する方法) がわかりません。u'\xfc'問題を 185 行目まで追跡しましたxml_serializer.py

 self.xml = SimplerXMLGenerator(self.stream, self.options.get("encoding", settings.DEFAULT_CHARSET))

に追加されましDEFAULT_CHARSET='utf-8'settings.pyが、今は立ち往生しています。

4

1 に答える 1