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).

_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a