2010-01-26 13 views
11

Có cách nào dễ dàng để xuất dữ liệu UTF-8 từ cơ sở dữ liệu không?Django dumpdata UTF-8 (Unicode)

Tôi biết lệnh này:

manage.py dumpdata > mydata.json 

Nhưng dữ liệu tôi có trong file mydata.json, dữ liệu Unicode trông giống như:

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

Tôi muốn nhìn thấy một chuỗi Unicode thực như 全球卫星定位系统 (Trung Quốc).

Trả lời

7

django-admin.py dumpdata yourapp có thể đổ cho mục đích đó.

Hoặc nếu bạn sử dụng MySQL, bạn có thể sử dụng lệnh mysqldump để đổ toàn bộ cơ sở dữ liệu.

this thread có nhiều cách để kết xuất dữ liệu, bao gồm cả các phương pháp thủ công.

CẬP NHẬT: vì OP đã chỉnh sửa câu hỏi.

Để chuyển đổi từ JSON chuỗi mã hóa chuỗi có thể đọc được con người bạn có thể sử dụng này:

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

cảm ơn, tôi biết lệnh này, nhưng dữ liệu tôi đã nhận trong file mydata.json, dữ liệu unicode trông giống như "tên": "\ u4e1c \ u6cf0 \ u9999 \ u6e2f \ u4e94 \ u91d1 \ u6709 \ u9650 \ u516c \ u53f8" tôi muốn nhìn thấy chuỗi unicode thực như '全球 卫星 定位 系统' (Tiếng Trung) – icn

+0

Đã thêm một số mã để chuyển đổi. Tôi không chắc chắn được xây dựng trong dumpdata chức năng có thể làm điều đó hay không. – YOU

4

Bạn cần phải hoặc là tìm ra lời kêu gọi json.dump*() trong mã Django và vượt qua các tùy chọn bổ sung ensure_ascii=False và sau đó mã hóa kết quả sau, hoặc bạn cần sử dụng json.load*() để tải JSON và sau đó đổ nó với tùy chọn đó.

+0

tôi không hiểu tại sao tùy chọn này không được cung cấp – doniyor

9

Sau khi đấu tranh với các vấn đề tương tự, tôi vừa tìm thấy, trình định dạng xml đó xử lý UTF8 đúng cách.

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

Tôi phải chuyển dữ liệu từ Django 0,96 sang Django 1.3. Sau nhiều lần thử với dữ liệu dump/load, cuối cùng tôi đã thành công khi sử dụng xml. Hiện không có tác dụng phụ.

Hy vọng điều này sẽ giúp ai đó, như tôi đã hạ cánh tại chủ đề này khi tìm kiếm một giải pháp ..

0
import codecs 
src = "/categories.json" 
dst = "/categories-new.json" 
source = codecs.open(src, 'r').read().decode('string-escape') 
codecs.open(dst, "wb").write(source)