exemple de code:
>>> import json
>>> json_string = json.dumps("ברי צקלה")
>>> print json_string
"\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4"
Le problème: ce n'est pas lisible par l'homme. Mes utilisateurs (intelligents) veulent vérifier ou même modifier des fichiers texte avec des vidages JSON (et je préfère ne pas utiliser XML).
Existe-t-il un moyen de sérialiser des objets dans des chaînes JSON UTF-8 (au lieu de \uXXXX
)?
Utilisez le ensure_ascii=False
commutateur vers json.dumps()
, puis encodez la valeur en UTF-8 manuellement:
>>> 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())
"ברי צקלה"
Si vous écrivez dans un fichier, utilisez simplement json.dump()
et laissez-le à l'objet fichier à encoder:
with open('filename', 'w', encoding='utf8') as json_file:
json.dump("ברי צקלה", json_file, ensure_ascii=False)
Mises en garde pour Python 2
Pour Python 2, il y a d'autres mises en garde à prendre en compte. Si vous écrivez ceci dans un fichier, vous pouvez utiliser io.open()
au lieu de open()
pour produire un objet fichier qui encode les valeurs Unicode pour vous au fur et à mesure que vous écrivez, puis utilisez à la json.dump()
place pour écrire dans ce fichier:
with io.open('filename', 'w', encoding='utf8') as json_file:
json.dump(u"ברי צקלה", json_file, ensure_ascii=False)
Notez qu'il y a un bogue dans le json
module où le ensure_ascii=False
drapeau peut produire un mélange d' objets unicode
et str
. La solution de contournement pour Python 2 est alors:
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))
Dans Python 2, lorsque vous utilisez des chaînes d'octets (type str
), encodées en UTF-8, assurez-vous de définir également le encoding
mot - clé:
>>> 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']
ברי צקלה
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots