User Tools

Site Tools


doc:appunti:prog:python_unicode

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:prog:python_unicode [2013/01/28 13:09] – [Nomi di file e directory] niccolodoc:appunti:prog:python_unicode [2015/07/17 09:50] (current) – [Nomi di file e directory] niccolo
Line 5: Line 5:
 Oppure queste slide: **[[http://farmdev.com/talks/unicode/|Unicode In Python, Completely Demystified]]**. Oppure queste slide: **[[http://farmdev.com/talks/unicode/|Unicode In Python, Completely Demystified]]**.
  
-===== Input: lettura da database =====+===== Input: lettura da database MySQL =====
  
 Si assume che nel database i campi testo siano codificati UTF-8. Sarebbe opportuno che il charset del database sia dichiarato UTF-8 in fase di creazione dello stesso; con PostgreSQL si tratta dell'impostazione predefinita, con MySQL invece no. Con MySQL è comunque possibile memorizzare testo UTF-8 anche se il charset dichiarato è quello predefinito **''latin1''**, per fortuna perché MySQL ha ancora molti problemi nella gestione di UTF-8 (spazio occupato dalle stringhe, limiti nella dimensione degli indici, ecc.). Si assume che nel database i campi testo siano codificati UTF-8. Sarebbe opportuno che il charset del database sia dichiarato UTF-8 in fase di creazione dello stesso; con PostgreSQL si tratta dell'impostazione predefinita, con MySQL invece no. Con MySQL è comunque possibile memorizzare testo UTF-8 anche se il charset dichiarato è quello predefinito **''latin1''**, per fortuna perché MySQL ha ancora molti problemi nella gestione di UTF-8 (spazio occupato dalle stringhe, limiti nella dimensione degli indici, ecc.).
Line 39: Line 39:
 </code> </code>
  
 +===== Input/Output: da database PostgreSQL =====
 +
 +Con queste istruzioni si apre una connessione al database e ci si assicura che tutte le stringhe che vengono lette siano di **''<type 'unicode'>''**:
 +
 +<code python>
 +import psycopg2
 +import psycopg2.extensions
 +psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
 +psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)
 +
 +conn = psycopg2.connect(host = "127.0.0.1", database = "dbname", user="dbuser", password="dbpass")
 +conn.set_client_encoding("UTF8")
 +curs = conn.cursor()
 +</code>
 ===== Input/Output: lettura/scrittura da pipe ===== ===== Input/Output: lettura/scrittura da pipe =====
  
Line 93: Line 107:
 </code> </code>
  
 +===== Lettura file di testo =====
 +
 +Invece della semplice **''open()''** conviene l'omologa **''codecs.open()''**:
 +
 +<code python>
 +import codecs
 +for line in codecs.open("filename.txt", "r", "iso-8859-15", "replace"):
 +    print line.strip()
 +</code>
doc/appunti/prog/python_unicode.1359374996.txt.gz · Last modified: 2013/01/28 13:09 by niccolo