[Python] errore

Daniele Varrazzo piro a develer.com
Mar 4 Nov 2008 18:36:27 CET



On Tue, 4 Nov 2008 17:47:32 +0100, "Zanon Samuele" <webs86 a gmail.com>
wrote:
> ciao a tutti... ho uno script in python per la generazione mediante
> reportlab di un paio di file pdf... solo che ho un errore (ricevuto
> mediante
> cgitb.enable()) che ha come intestazione
> 
> <type 'exceptions.UnicodeDecodeError'>

Chi effettua la codifica che fa scaturire l'errore? Il db? reportlab? il
tuo programma? Un po' di contesto in più non guasterebbe: per esempio il
traceback e il valore delle stringhe che generano l'eccezione.

> ho scoperto che è un problema di codifica dei caratteri (estratti da una
> tabella mysql) e che probabilmente dipende dal fatto che ci sono dei
> caratteri speciali che non riesce a gestire. come posso risolvere il
> problema senza mettere mano alle mille e passa righe del database?

Io credo che da qualche parte stia avvenendo una conversione usando un
encoding di default e senza una politica di gestione degli errori di
conversione settata. Mi viene in mente che stai passando dell'unicode a
reportlab, che invece si aspetta una stringa ad 8 bit, e da qualche parte
viene effettuato l'encoding in ascii, ma visto che il tuo errore è nel
decode, allora non saprei.

Ci sono chiamate a reportlab a cui passi stringhe unicode? In questo caso
prova a mettere prima una conversione tipo

    s = s.encode('cp1252', 'replace')

ma non sono sicuro che l'errore sia qua: dici troppo poco.

> aggiungo che come seconda riga ho impostato # -*- coding: utf-8 -*-

Questo non c'entra con il database: riguarda solo l'encoding del sorgente
(ma se hai dei letterali unicode nei sorgenti, che poi passi a reportlab,
devono subire lo stesso trattamento).

-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com


Maggiori informazioni sulla lista Python