سؤال

هل هناك طريقة سهلة لتفريغها UTF-8 بيانات من قاعدة بيانات؟

أنا أعرف هذا الأمر:

manage.py dumpdata > mydata.json

لكن البيانات التي حصلت عليها في ملف myData.json ، تبدو بيانات Unicode:

"name": "\u4e1c\u6cf0\u9999\u6e2f\u4e94\u91d1\u6709\u9650\u516c\u53f8"

أود أن أرى سلسلة يونيكود حقيقية مثل 全球卫星定位系统 (صينى).

هل كانت مفيدة؟

المحلول

django-admin.py dumpdata yoursapp يمكن أن تفريغ لهذا الغرض.

أو إذا كنت تستخدم MySQL ، فيمكنك استخدام mysqldump أمر لتفريغ قاعدة البيانات بأكملها.

و هذا الموضوع لديه العديد من الطرق لتفريغ البيانات ، بما في ذلك الأساليب اليدوية.

تحديث: لأن OP قام بتحرير السؤال.

للتحويل من سلسلة ترميز JSON إلى سلسلة قابلة للقراءة البشرية ، يمكنك استخدام هذا:

open("mydata-new.json","wb").write(open("mydata.json").read().decode("unicode_escape").encode("utf8"))

نصائح أخرى

بعد الكفاح مع مشكلات مماثلة ، لقد وجدت للتو ، أن Formatter XML يتعامل مع UTF8 بشكل صحيح.

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

اضطررت إلى نقل البيانات من Django 0.96 إلى Django 1.3. بعد العديد من المحاولات باستخدام بيانات التفريغ/التحميل ، نجحت أخيرًا في استخدام XML. لا توجد آثار جانبية الآن.

آمل أن يساعد هذا شخصًا ما ، حيث هبطت في هذا الموضوع عند البحث عن حل ..

تحتاج إما إلى العثور على المكالمة json.dump*() في رمز Django ومرر الخيار الإضافي 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