有一种简单的方法来从数据库转储 UTF-8 数据<? / p>

我知道这个命令:

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"))

其他提示

类似问题的挣扎后,我刚刚发现,XML格式手柄UTF8正常。

manage.py dumpdata --format=xml > output.xml

我不得不将数据从Django的0.96转移到Django的1.3。无数次尝试与转储/加载数据后,我终于用XML成功。无副作用现在。

希望这将帮助别人,因为我已经在这个线程寻找一个解决方案时降落..

您需要可以发现在Django的代码中调用json.dump*()并通过附加选项ensure_ascii=False,然后将结果进行编码后,或者你需要使用json.load*()加载JSON,然后用该选项转储它。

下面我写一个片段为该。 对我的作品!

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top