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