dumpdata
Django のコマンドを使用して 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
が、今は立ち往生しています。