Django dumpdata UTF-8(Unicode)
質問
があるので簡単にダンプ UTF-8 データからのデータベース?
このコマンド:
manage.py dumpdata > mydata.json
そのデータかファイル内のmydata.json、Unicodeデータを次のように記述されています。
"name": "\u4e1c\u6cf0\u9999\u6e2f\u4e94\u91d1\u6709\u9650\u516c\u53f8"
う本物のUnicode文字列のように 全球卫星定位系统
(中国語)。
解決
django-admin.py dumpdata yourapp がダンプされます。
またはご利用の場合、MySQLを使用できるの mysqldumpを コマンドをダンプ全体のデータベースです。
や このスレッド 多くの方にダンプを含むデータをマニュアルの方法。
更新:でOP編集の問題をもたらしていました。
変換からJSONエンコード文字列を人間が読める形式の文字列を使用できること:
open("mydata-new.json","wb").write(open("mydata.json").read().decode("unicode_escape").encode("utf8"))
他のヒント
同様の問題で苦労した後、私はちょうど見つけた、適切にハンドルUTF8フォーマッタそのXMLます。
manage.py dumpdata --format=xml > output.xml
私は、Djangoの1.3に0.96からデータを転送する必要がありました。ダンプ/ロード・データを多数回の試行の後、私は最終的にXMLを使用して成功してきました。今のところ副作用はありません。
・ホープ、この意志のヘルプ誰か、ソリューションを探していたとき、私はこのスレッドで上陸してきたように..
あなたはDjangoのコードにjson.dump*()
への呼び出しを見つけると、追加のオプションensure_ascii=False
を通過した後、後に結果をエンコードするか、JSONを読み込むと、そのオプションでそれをダンプするjson.load*()
を使用する必要があるのいずれかにする必要があります。
ここで私はそののスニペットを書きました。 私の作品!
import codecs
src = "/categories.json"
dst = "/categories-new.json"
source = codecs.open(src, 'r').read().decode('string-escape')
codecs.open(dst, "wb").write(source)
あなたはensure_ascii=False
関数にjson.dumps
引数を渡し、独自のシリアライザを作成することができます:
# serfializers/json_no_uescape.py
from django.core.serializers.json import *
class Serializer(Serializer):
def _init_options(self):
super(Serializer, self)._init_options()
self.json_kwargs['ensure_ascii'] = False
次に、(アプリ__init__.py
ファイルの例について)新しいシリアライザを登録します:
from django.core.serializers import register_serializer
register_serializer('json-no-uescape', 'serializers.json_no_uescape')
そして、あなたが実行することができます:
manage.py dumpdata --format=json-no-uescape > output.json
ちょうどそれをここに残します:
./manage.py dumpdata --indent=2 core.item | python3 -c "import sys; sys.stdout.write(sys.stdin.read().encode().decode('unicode_escape'))" > core/fixtures/item.json