[Python] Usare Unicode e charset
Manlio Perillo
manlio_perillo a libero.it
Mer 2 Dic 2009 22:29:14 CET
Massimo Capanni ha scritto:
> Il 02 dicembre 2009 18.32, Manlio Perillo <manlio_perillo a libero.it> ha scritto:
>> Massimo Capanni ha scritto:
>>> Salve,
>>>
>>> confesso che ho un po' di timore a postare questo thread,
>> e perchè mai?
>>
> perche' e' un vero salto nel buio :)
> a volte mi piacerebbe avere uno di quei libri con la semantica di
> python (se esistono),
Credo siamo pochi i linguaggi ad avere una specificazione semantica completa
http://en.wikipedia.org/wiki/Formal_semantics_of_programming_languages
> come all'universita' li avevo per il pascal e capire che fine fa il
> codice che scrivi ...
>
In Python c'è questo:
http://docs.python.org/reference/index.html
ma non copre tutto.
> [...]
>
>> Il secondo caso è quando converti una stringa normale in Unicode.
>>
>>>>> byte_string = 'àè'
>>>>> s = unicode(byte_string)
>> Traceback (most recent call last):
>> File "<stdin>", line 1, in <module>
>> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
>> ordinal not in range(128)
>>
>>>>> import sys
>>>>> reload(sys)
>
> perche' reload(sys)?
>
Perchè è il trucco usato per poter accedere a setdefaultencoding.
Per evitare di farsi del male, quando l'interprete viene inizializzato,
quella funzione viene rimossa dal modulo sys.
In particolare, questa operazione viene fatta nel modulo site.py:
# Remove sys.setdefaultencoding() so that users cannot change the
# encoding after initialization. The test for presence is needed when
# this module is run as a script, because this code is executed twice.
if hasattr(sys, "setdefaultencoding"):
del sys.setdefaultencoding
> [...]
>
> ok, effettivamente adesso le cose cominciano leggermente a tornare :)
>
> Concludo quindi il mio post con Unicode: conviene trattare tutte le
> stringhe come
> Unicode per evitare problemi di portabilita'?
>
Si, e non solo.
Una stringa contiene del testo ed il testo è differente da una sequenza
di bytes.
Ciao Manlio
Maggiori informazioni sulla lista
Python