Vous visualisez la représentation des données sous-évaluées. Depuis que vous avez désactivé JSON_AS_ASCII
, vous obtenez deux octets UTF-8 plutôt qu'un échappement Unicode compatible ASCII. JSON est toujours UTF-8, quelle que soit la représentation que vous choisissez, mais il est généralement plus sûr de s'en tenir à la valeur par défaut. Quoi que vous utilisiez pour visualiser les données, vous interprétez mal les octets comme Latin-1, pas UTF-8. Dites à tout ce que vous regardez les données avec que c'est UTF-8, et il semblera correct. Chargez les données de JSON et vous verrez qu'il est toujours correct.
from flask import Flask, jsonify, json
app = Flask('example')
app.config['JSON_AS_ASCII'] = True # default
with app.app_context():
print(jsonify('é').data) # b'"\\u00e9"\n', Unicode escape
app.config['JSON_AS_ASCII'] = False
with app.app_context():
print(jsonify('é').data) # b'"\xc3\xa9"\n', UTF-8 bytes
# you're viewing the bytes as Latin-1
print(b'\xc3\xa9'.decode('latin1')) # é
# but it's UTF-8
print(b'\xc3\xa9'.decode('utf8')) # é
# JSON is always UTF-8
print(json.loads(b'"\\u00e9"\n') # é
print(json.loads(b'"\xc3\xa9"\n') # é
Merci mais je ne comprends pas encore comment je corrige le code pour imprimer 'é' en utilisant jsonify. –
Il n'y a rien à corriger. Tout ce que vous visualisez avec les octets est de choisir le mauvais encodage pour l'afficher, mais JSON est toujours UTF-8. Choisissez UTF-8 et il semblera correct. Chargez les données et ce sera correct. – davidism
Je visualise les octets avec Chrome en accédant à localhost/(l'itinéraire défini par @ app.route ('/') –