Re: [Python] Flask, jsonify e lettere accentate

2016-06-19 Per discussione Andrea D'Amore
2016-06-17 16:28 GMT+02:00 Fornacciari Andrea :
> Se aggiungo a result.description la decodifica
> result.description.decode("latin1"), la risposta è corretta:

> Immagino che problemi con i charsets siano abbastanza frequenti, c'è modo
> per evitare di dover impostare per ogni singolo campo alfanumerico la
> decodifica corretta?

La pagina di SQLA per il backend oracle ha un paio di match per
"encoding", li hai letti?

Non credo tu possa esimerti dal sapere che codifica stai usando nel
database, guarda la presentazione o il video unipain [1].

> P.S.: Lo stesso codice nella 3.5 funziona perfettamente senza attributo
> decode (che tra l'altro nella 3 hanno rimosso).

Non sono ferrato perché uso perlopiù 2.7, ma da i vari "2 vs. 3" che
ho letto la differenza la fa il concetto di stringa che in py2 è una
sequenza di byte mentre in py3 è una sequenza di caratteri, quindi una
volta che hai la stringa non esiste il problema di codifica.


[1]: http://nedbatchelder.com/text/unipain.html

-- 
Andrea
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Flask, jsonify e lettere accentate

2016-06-17 Per discussione Fornacciari Andrea
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