Qualche giorno fa mi è capitato di dover testare alcune funzionalità di un prodotto per Plone legate alla codifica dei caratteri; insomma il solito e rognoso problema delle lettere accentate e unicode.
Per chiarirmi la quesitione ho creato un piccolo prodotto d'esempio chiamato Products.testutf8.
Il prodotto contiene solamente i seguenti file:
- __init__.py - un file vuoto
- configure.zcml - non contiene configurazioni rilevanti per questo esempio)
- tests.py - contiene le configurazioni per la suite di test
- test_utf8.txt - il file con i doctest
La parte importante risiede nel file tests.py dove dobbiamo definire l'encoding utilizzato per i test.
def test_suite():
return unittest.TestSuite([
# Unit tests
doctestunit.DocFileSuite(
'README.txt', package = 'Products.testutf8',
encoding = 'utf8',
setUp = testing.setUp, tearDown = testing.tearDown)
e questi sono gli utilissimi test che ho effettuato
Istanzio una variabile in unicode contente una stringa piena di accenti
>>> pippo = u'àèìòù'
>>> type(pippo)
<type 'unicode'>
>>> pippo
u'\xe0\xe8\xec\xf2\xf9'
posso stampare pippo senza problemi e il valore è correttamente 'codificato'
>>> print pippo
àèìòù
Lo stesso posso fare con una stringa 'normale'
>>> pippo = 'àèìòù'
>>> type(pippo)
<type 'str'>
>>> pippo
'\xc3\xa0\xc3\xa8\xc3\xac\xc3\xb2\xc3\xb9'
Prima di stamparla però devo decodificarla in unicode
>>> u_pippo = pippo.decode('utf-8')
>>> type(u_pippo)
<type 'unicode'>
>>> u_pippo
u'\xe0\xe8\xec\xf2\xf9'
adesso la stampo correttamente
>>> print u_pippo
àèìòù
- Archive
- 2009 2010 2011 2012