Sử dụng ensure_ascii=False
chuyển đổi sang json.dumps()
, sau đó mã hóa giá trị thành UTF-8 theo cách thủ công:
>>> json_string = json.dumps("ברי צקלה", ensure_ascii=False).encode('utf8')
>>> json_string
b'"\xd7\x91\xd7\xa8\xd7\x99 \xd7\xa6\xd7\xa7\xd7\x9c\xd7\x94"'
>>> print(json_string.decode())
"ברי צקלה"
Nếu bạn đang ghi vào một tệp, chỉ cần sử dụng json.dump()
và để nó vào đối tượng tệp để mã hóa:
with open('filename', 'w', encoding='utf8') as json_file:
json.dump("ברי צקלה", json_file, ensure_ascii=False)
Hãy cẩn thận cho Python 2
Đối với Python 2, có một số lưu ý khác cần tính đến. Nếu bạn đang ghi điều này vào một tệp, bạn có thể sử dụng io.open()
thay vì open()
tạo một đối tượng tệp mã hóa các giá trị Unicode cho bạn khi bạn viết, sau đó sử dụng json.dump()
để ghi vào tệp đó:
with io.open('filename', 'w', encoding='utf8') as json_file:
json.dump(u"ברי צקלה", json_file, ensure_ascii=False)
Do lưu ý rằng có một lỗi trong các json
mô-đun nơi ensure_ascii=False
cờ có thể tạo ra một sự pha trộn của unicode
và str
đối tượng. Cách giải quyết cho Python 2 là:
with io.open('filename', 'w', encoding='utf8') as json_file:
data = json.dumps(u"ברי צקלה", ensure_ascii=False)
# unicode(data) auto-decodes data to unicode if str
json_file.write(unicode(data))
Trong Python 2, khi sử dụng chuỗi byte (loại str
), được mã hóa thành UTF-8, hãy đảm bảo cũng đặt encoding
từ khóa:
>>> d={ 1: "ברי צקלה", 2: u"ברי צקלה" }
>>> d
{1: '\xd7\x91\xd7\xa8\xd7\x99 \xd7\xa6\xd7\xa7\xd7\x9c\xd7\x94', 2: u'\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4'}
>>> s=json.dumps(d, ensure_ascii=False, encoding='utf8')
>>> s
u'{"1": "\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4", "2": "\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4"}'
>>> json.loads(s)['1']
u'\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4'
>>> json.loads(s)['2']
u'\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4'
>>> print json.loads(s)['1']
ברי צקלה
>>> print json.loads(s)['2']
ברי צקלה