[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