ใช้ensure_ascii=False
สวิตช์ไปที่json.dumps()
แล้วเข้ารหัสค่าเป็น UTF-8 ด้วยตนเอง:
>>> 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())
"ברי צקלה"
หากคุณกำลังเขียนไปยังไฟล์เพียงใช้json.dump()
และปล่อยให้วัตถุไฟล์ที่จะเข้ารหัส:
with open('filename', 'w', encoding='utf8') as json_file:
json.dump("ברי צקלה", json_file, ensure_ascii=False)
Caveats สำหรับ Python 2
สำหรับ Python 2 มีข้อควรพิจารณาอีกหลายประการ หากคุณกำลังเขียนสิ่งนี้ลงในไฟล์คุณสามารถใช้io.open()
แทนopen()
การสร้างวัตถุไฟล์ที่เข้ารหัสค่า Unicode ให้คุณเมื่อคุณเขียนจากนั้นใช้json.dump()
แทนการเขียนลงในไฟล์นั้น:
with io.open('filename', 'w', encoding='utf8') as json_file:
json.dump(u"ברי צקלה", json_file, ensure_ascii=False)
ทำบันทึกว่ามีข้อผิดพลาดในjson
โมดูลที่ensure_ascii=False
ธงสามารถผลิตผสมของunicode
และstr
วัตถุ วิธีแก้ปัญหาสำหรับ Python 2 คือ:
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))
ใน Python 2 เมื่อใช้สตริงไบต์ (ชนิดstr
) เข้ารหัสเป็น UTF-8 ตรวจสอบให้แน่ใจว่าได้ตั้งค่าencoding
คำหลักแล้ว:
>>> 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']
ברי צקלה