[Plone-IT] problema con la codifica dei caratteri
Yuri
yurj a alfa.it
Gio 26 Feb 2009 10:03:22 UTC
Yuri ha scritto:
> wipedisk ha scritto:
>> ho Zope che si interfaccia a Postgresql 8.3 mediante psycopg.
>> il database "bottiglie" su postgresql e' UTF8.
>> il "locale" del server linux sul quale girano sia zope che pgsql e'
>> it_UTF8.
>> la direttiva "client encoding" su postgresql.conf e' UTF8 (anziche' il
>> default sql_ascii).
>>
>
> Devi fare attenzione che c'è differenza tra stringhe unicode e
> stringhe encodate utf-8
>
> http://mail.python.org/pipermail/python-list/2004-October/287444.html
>
> Quindi dovresti controllare che tipi di oggetti passa zope a psycopg,
> e viceversa. Forse ha più senso che tu tenga i valori in postgres come
> binary e lasci fare a Zope il resto, oppure encodi/decodi prima di
> salvare in postgres.
>
> yurj a macbook:~$ python
> Python 2.5.2 (r252:60911, Jan 4 2009, 17:40:26)
> [GCC 4.3.2] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>> x = u'\xc8'
> >>> print x
> È
> >>> y = x.encode('utf-8')
> >>> print y
> È
> >>> print x.encode('ascii')
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> UnicodeEncodeError: 'ascii' codec can't encode character u'\xc8' in
> position 0:
> ordinal not in range(128)
> >>> print y.encode('ascii')
> 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)
> >>> z = x.encode('latin1')
> >>> print z
> �
> >>>y
> '\xc3\x88'
> >>>
Forse questo è ancora più chiaro:
>>> w = "È"
>>> w.encode('utf-8')
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)
>>> y = w.decode('utf-8')
>>> print y
È
>>> y
u'\xc8'
>>>
cioè w contiene È ma non è una stringa unicode, anche se contiene un
carattere utf-8 che viene stampato correttamente solo perchè il
terminale lo sa gestire.
>
>
>> purtroppo succede che immettendo dall'applicazione zope dei valori nei
>> campi che poi vengono trasferiti al database, lettere accentate o
>> simboli come quello dell'ordinale (°) italiano, nel database non
>> ottengo sempre lo stesso carattere.
>>
>> anzi... il problema e' che mi ritrovo sempre qualche errore tipo:
>> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position
>> 48: ordinal not in range(128)
>>
>> Ho cercato con google trovando indicazioni piu' che altro su persone
>> che hanno il mio stesso problema e non l'hanno risolto (zope) oppure su
>> persone che l'hanno risolto (ma si riferivano ad applicazioni con php).
>>
>> Ho anche provato ad agire sulle impostazioni di Firefox, forzano la
>> codifica a UTF8 oppure a quella sua di default, se installato per la
>> lingua italiana, ISO 8891-qualcosa (ora non ricordo...) ma niente lo
>> stesso. Le accentate diventano "bombe" dentro postgresql quando sono
>> richiamate da Zope.
>>
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Plone-IT mailing list
>> Plone-IT a lists.plone.org
>> http://lists.plone.org/mailman/listinfo/plone-it
>> http://www.nabble.com/Plone---Italy-f21728.html
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Plone-IT mailing list
> Plone-IT a lists.plone.org
> http://lists.plone.org/mailman/listinfo/plone-it
> http://www.nabble.com/Plone---Italy-f21728.html
Maggiori informazioni sulla lista
Plone-IT