[Python] codifica unicode di caratteri speciali
Daniele Varrazzo
piro a develer.com
Lun 4 Feb 2013 12:43:03 CET
On 2013-02-04 11:53, linediconsine a gmail.com wrote:
> Ciao credo di non aver capito come si usa questa funzione e googlando
> non ci ho capito molto riassumendo :
>
> a = "òàçòòà"
>
> a.encode('utf-8')
>
>
> mi da come errore :
>
> File "Untitled.py", line 1
>
> SyntaxError: Non-ASCII character '\xc3' in file Untitled.py on line
> 1, but
> no encoding declared; see http://www.python.org/peps/pep-0263.html
> for
> details
>
> Cosa mi suggerite?
Di leggere http://www.python.org/peps/pep-0263.html e di leggere sulla
differenza tra encode e decode.
Anzi, questa te la dico io, perché questo punto penso sia disastroso in
Python e spiegato dolorosamente male: la "direzione" di encode (ovvero:
cos'è "la realtà" e cos'è "la sua codifica") è che la realtà è unicode,
una stringa è una sua codifica. Le uniche operazioni che hanno senso
sono:
- encode: trasforma unicode in una stringa. unicode.encode(encoding) ->
str
- decode: trasforma una stringa in unicode. str.decode(encoding) ->
unicode
Tutti gli altri metodi NON HANNO SENSO. Il problema è che esistono.
unicode.decode() e str.encode() devono bruciare all'inferno. L'effetto
di questi metodi è di effettuare prima l'operazione inversa in un
encoding non definito (tipicamente ascii). Il risultato è il tuo
programma che scoppia con...
>>> u = u'€'
>>> u
u'\u20ac'
>>> u.decode('utf8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac'
in position 0: ordinal not in range(128)
perfetto no? un errore nell'encode quando chiedi il decode? Che idea
del cazzo.
Leggi anche il pep 263, che riguarda cosa python deve capire quando usi
caratteri non ascii nei sorgenti, che è un problema correlato ma non è
lo stesso (infatti tu hai un errore di sintassi, non di
codifica/decodifica).
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
Maggiori informazioni sulla lista
Python