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

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top