Datos de volcado de Django UTF-8 (Unicode)
Pregunta
¿Hay una manera fácil de deshacerse UTF-8 datos de una base de datos?
Conozco este comando:
manage.py dumpdata > mydata.json
Pero los datos que obtuve en el archivo mydata.json, los datos Unicode se ven así:
"name": "\u4e1c\u6cf0\u9999\u6e2f\u4e94\u91d1\u6709\u9650\u516c\u53f8"
Me gustaría ver una cadena Unicode real como 全球卫星定位系统
(Chino).
Solución
django-admin.py dumpdata tu aplicación podría volcar con ese fin.
O si usas MySQL, puedes usar el mysqldump comando para volcar toda la base de datos.
Y este hilo Tiene muchas formas de volcar datos, incluidos métodos manuales.
ACTUALIZAR:porque OP editó la pregunta.
Para convertir una cadena de codificación JSON a una cadena legible por humanos, puede usar esto:
open("mydata-new.json","wb").write(open("mydata.json").read().decode("unicode_escape").encode("utf8"))
Otros consejos
Después de luchar con problemas similares, sólo he hallado: que formateador XML asas UTF8 correctamente.
manage.py dumpdata --format=xml > output.xml
he tenido que transferir datos de Django Django 0,96 a 1,3. Después de numerosos intentos con los datos de volcado / carga, he finalmente tuvo éxito usando XML. No tiene efectos secundarios por ahora.
Esperamos que esto ayude a alguien, como si hubiera aterrizado en este hilo en la búsqueda de una solución ..
Es necesario encontrar ya sea la llamada a json.dump*()
en el código Django y pasar el ensure_ascii=False
opción adicional y luego codificar el resultado después de, o es necesario utilizar json.load*()
para cargar el JSON y luego lo descarga con esa opción.
Aquí me escribió una fragmento para ese . Obras para mí!
import codecs
src = "/categories.json"
dst = "/categories-new.json"
source = codecs.open(src, 'r').read().decode('string-escape')
codecs.open(dst, "wb").write(source)
Usted puede crear su propia serializador que pasa a la función argumento 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
A continuación, registrar la nueva serializador (por ejemplo, en el archivo de aplicación __init__.py
):
from django.core.serializers import register_serializer
register_serializer('json-no-uescape', 'serializers.json_no_uescape')
A continuación, puede ejecutar:
manage.py dumpdata --format=json-no-uescape > output.json
dejarlo aquí:
./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