Django的dumpdata UTF-8(Unicode)的
题
有一种简单的方法来从数据库转储 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
不隶属于 StackOverflow