2017-09-20 1 views
0

jsonify('é') n'imprime pas ce que j'attends. Au lieu de é, je vois é.L'utilisation des affichages jsonify de Flask é comme

app = Flask(__name__) 
app.config['JSON_AS_ASCII'] = False 

@app.route('/') 
def test(): 
    return jsonify('é') 

Le codage du script est UTF-8. L'encodage JSON UTF-8 est censé être activé par JSON_AS_ASCII = False.

Répondre

1

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') # é 
+0

Merci mais je ne comprends pas encore comment je corrige le code pour imprimer 'é' en utilisant jsonify. –

+1

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

+0

Je visualise les octets avec Chrome en accédant à localhost/(l'itinéraire défini par @ app.route ('/') –