doc:appunti:prog:python_unicode
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
doc:appunti:prog:python_unicode [2012/12/04 01:33] – [Input: lettura da database] niccolo | doc:appunti:prog:python_unicode [2015/07/17 09:50] (current) – [Nomi di file e directory] niccolo | ||
---|---|---|---|
Line 5: | Line 5: | ||
Oppure queste slide: **[[http:// | Oppure queste slide: **[[http:// | ||
- | ===== Input: lettura da database ===== | + | ===== Input: lettura da database |
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' | 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' | ||
Line 39: | Line 39: | ||
</ | </ | ||
+ | ===== Input/ | ||
+ | |||
+ | Con queste istruzioni si apre una connessione al database e ci si assicura che tutte le stringhe che vengono lette siano di **''< | ||
+ | |||
+ | <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 = " | ||
+ | conn.set_client_encoding(" | ||
+ | curs = conn.cursor() | ||
+ | </ | ||
===== Input/ | ===== Input/ | ||
Line 49: | Line 63: | ||
output = output.decode(' | output = output.decode(' | ||
</ | </ | ||
+ | |||
+ | La stringa **'' | ||
===== Output: codifica implicita della print ===== | ===== Output: codifica implicita della print ===== | ||
Line 57: | Line 73: | ||
</ | </ | ||
- | codifica il contenuto di '' | + | codifica il contenuto di '' |
< | < | ||
Line 69: | Line 85: | ||
</ | </ | ||
+ | ===== Nomi di file e directory ===== | ||
+ | |||
+ | Alcune funzioni relative al filesystem potrebbero causare problemi, ad esempio: | ||
+ | |||
+ | <code python> | ||
+ | os.path.isfile(filename) | ||
+ | os.stat(filename) | ||
+ | </ | ||
+ | |||
+ | potrebbe fallire con: | ||
+ | |||
+ | < | ||
+ | UnicodeEncodeError: | ||
+ | </ | ||
+ | |||
+ | La soluzione è codificare esplicitamente la stringa prima di passarla alla funzione: | ||
+ | |||
+ | <code python> | ||
+ | os.path.isfile(filename.encode(' | ||
+ | os.stat(filename.encode(' | ||
+ | </ | ||
+ | |||
+ | ===== Lettura file di testo ===== | ||
+ | |||
+ | Invece della semplice **'' | ||
+ | |||
+ | <code python> | ||
+ | import codecs | ||
+ | for line in codecs.open(" | ||
+ | print line.strip() | ||
+ | </ |
doc/appunti/prog/python_unicode.1354581201.txt.gz · Last modified: 2012/12/04 01:33 by niccolo