martedì 16 luglio 2013

Python, Unicode e Windows XP

 Leggendo i commenti ai post di Mission Python (meglio tardi che mai) mi sono accorto che devo delle scuse all'amico B. che si lamentava del fatto che i miei script non funzionavano.
Il fatto è che io uso Linux, per queste cose mooolto meglio di Windows; OK, anche per quasi tutto il resto. Oltretutto è da considerare che XP è piuttosto vecchio (tra un po' Micro$oft cessa di supportarlo, niente più aggiornamenti). Pare però che sia la versione migliore di sempre e sia ancora molto usato, anche se per quel che ne so c'è una consistente migrazione verso 7 (in ambito professionale).
In ogni caso mi sembra doveroso dire qualcosa sull'Unicode, cioè le lettere accentate con Python 2.x, quello normale.

1
2
3
4
# -*- coding: UTF-8 -*-

st = "Ecco gli accenti: àèéìòùç€"
print st


OPS! non funziona, skifetse!
Vediamo cosa si può fare:

1
2
3
4
5
# -*- coding: UTF-8 -*-

st = u"Ecco gli accenti: àèéìòùç"
print st



OK, sembra andare, ma vediamo cosa succede con il simbolo dell'euro €:

1
2
3
4
# -*- coding: UTF-8 -*-

st = u"Ecco l'euro: €"
print st 


No! non funziona.
C'è un'altra possibile via da seguire, proviamo:

1
2
3
4
5
6
7
# -*- coding: UTF-8 -*-

st = "Ecco gli accenti: àèéìòùç"
print st

ust = st.decode('utf8')
print ust 


OK, chissà se...

1
2
3
4
5
6
7
# -*- coding: UTF-8 -*-

st = "Chissà se...: €"
print st

ust = st.decode('utf8')
print ust 


No! niente euri per Python 2!

Resta da vedere il comportamento con i file (di testo, quelli che con Linux si chiamano stream). Possiamo scriverne uno, verificare e, se va bene leggerlo e visualizzarlo.
Scrittura del file:

1
2
3
4
5
6
7
8
9
# -*- coding: UTF-8 -*-

txt = "Adesso provo a scrivere il file testo.txt\n" + \
       "che contine caratteri non-ASCII\n" + \
       "Ecco gli accenti: àèéìòùç"

f = open('testo.txt', 'w')
f.write(txt)
f.close()

Funziona, apritelo per verificare. naturalmente se lo fate con quella schifezza di Blocco note vedrete, ovviamente, skifetse! Usate, credo di averlo già detto, un editor decente.

Adesso che abbiamo un file con caratteri bizzosi possiamo provare a leggerlo:

1
2
3
4
5
6
7
8
# -*- coding: UTF-8 -*-

f = open('testo.txt', 'r')
txt = f.read()
f.close()

utxt = txt.decode('utf8')
print utxt


OK? mission XP done, adesso se nessuno fa le prove con 7 le farò io, prossimamente, devo accedere a una macchina con quella skif versione del sitema operativo sopra.

1 commento:

  1. grazie Juhan i commenti prob erano i miei :D
    comunque uso molto più Ubuntu e Mint
    perché su windows xp ho troppe distrazioni :)))

    RispondiElimina