On Tue, 31 Aug 2010 17:23:00 +0200, "Vittorio Zuccala'" <vittorio.zucc...@gmail.com> wrote:
> Tutto funziona finchè non incontra lettere con accenti, apostrofi o cose > strane. Questa frase ha una certa universalità :) > L'errore che mi restituisce è il seguente: > > *"row[i]=unicode(row[i]) > UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 4: > ordinal not in range(128)" Benvenuto nel magico mondo degli encoding. Il problema si limita a questo, non dipende da sqlite. > Come posso ovviare il problema? 1. devi *sapere* quale è l'encoding originale di row[i]. Se non lo sai, hai poche speranze di fare qualunque cosa (leggi <http://www.joelonsoftware.com/articles/Unicode.html> per una rapida introduzione) 2. se row[i] è una stringa (oggetto 'str') e se l'encoding è latin1, puoi usare "row[i] = row[i].decode('latin1')" 3. se l'encoding è "quasi sempre latin1", ovvero ti aspetti che a monte abbiano fatto degli errori, puoi usare: row[i].decode('latin1', 'replace') così almeno se in input viene passato un carattere illegale in output viene sostituito da "?" invece che tirare un'eccezione. 4. latin1, latin9, cp1252 sono orrendamente simili: non credere di sapere quale sia il tuo encoding finché non hai visto un carattere euro; nel frattempo meglio usare la ricetta in 3. -- Daniele Varrazzo - Develer S.r.l. http://www.develer.com _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python