[Python] Flask, jsonify e lettere accentate

Fornacciari Andrea afornacciari a yahoo.it
Ven 17 Giu 2016 16:28:12 CEST


Ciao a tutti,premetto che ho poca esperienza con il linguaggio, sto "tentando" di realizzare alcuni web services utilizzando python 2.7, Flask, sqlalchemy e Oracle.In sostanza devo semplicemente esporre delle informazioni lette dal database.Ho fatto un modulino di test, avviato il ws, ed effettuato la chiamata da browser. Fin qui tutto bene, finchè non ho trovato delle lettere accentate.La chiamata è andata in errore ritornando il seguente messaggio:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xf9 in position 8: invalid start byte

Sotto il codice incriminato, l'errore avviene sul jsonify:
from flask_sqlalchemy import SQLAlchemyfrom flask import Flask, jsonify  import json
db = SQLAlchemy()
app = Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] = 'oracle://user:pwd@ip/sid'app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
class Article(db.Model):    __tablename__ = 'ARTICLES'    id = db.Column(db.Integer, primary_key=True)    code = db.Column(db.String(64))    description = db.Column(db.String(64))    @app.route('/articles/', methods=['GET'])def articles():         sql = """select id, code, description from articles where code = '11203'"""    results = Article.query.from_statement(sql)        json_results = []        for result in results:      d = {'id': result.id,           'code': result.code,           'description': result.description           }
      json_results.append(d)        return jsonify(articles=json_results)
if __name__ == '__main__':        app.debug = True    app.run(host="0.0.0.0",port=5027)
Se aggiungo a result.description la decodifica result.description.decode("latin1"), la risposta è corretta:{
  "articles": [
    {
      "code": "11203", 
      "description": "Uovo Rag\u00f9 Carne", 
      "id": 192
    }
  ]
}Immagino che problemi con i charsets siano abbastanza frequenti, c'è modo per evitare di dover impostare per ogni singolo campo alfanumerico la decodifica corretta? P.S.: Lo stesso codice nella 3.5 funziona perfettamente senza attributo decode (che tra l'altro nella 3 hanno rimosso).

-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20160617/d80508d4/attachment.html>


Maggiori informazioni sulla lista Python