[RISOLTO]python-tostring() decode problem

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
Alkatron
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1248
Iscrizione: giovedì 16 aprile 2009, 13:26
Distribuzione: debian jessie 64
Contatti:

[RISOLTO]python-tostring() decode problem

Messaggio da Alkatron »

Ho un problema con il segno dell'euro....

Codice: Seleziona tutto

Python 2.7.3 (default, Mar 14 2014, 11:57:14) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> from xml.etree.ElementTree import  Element, SubElement, tostring
>>> locale.setlocale(locale.LC_ALL, 'it_IT.utf8')
'it_IT.utf8'
>>> root = Element( 'div')
>>> root.text= locale.currency(23.70, grouping= True)
>>> print root.text
€ 23,70
>>> print tostring(root,'utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1127, in tostring
    ElementTree(element).write(file, encoding, method=method)
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 821, in write
    serialize(write, self._root, encoding, qnames, namespaces)
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 938, in _serialize_xml
    write(_escape_cdata(text, encoding))
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1074, in _escape_cdata
    return text.encode(encoding, "xmlcharrefreplace")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)
>>> 
qualcuno sa come risolverlo?
Grazie
Ultima modifica di Alkatron il venerdì 15 maggio 2015, 11:28, modificato 1 volta in totale.
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2889
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: python-tostring() decode problem

Messaggio da rai »

la stringa risultante si deve decodificare esplicitamente in <unicode> se può contenere caratteri oltre la codifica ASCII

la codifica dei dati in input devi saperla tu (o va trovata per tentativi). Ammettendo che sia latin ossia iso-8859-1, prova a fare così

Codice: Seleziona tutto

root.text= locale.currency(23.70, grouping= True).decode('latin')
Avatar utente
Alkatron
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1248
Iscrizione: giovedì 16 aprile 2009, 13:26
Distribuzione: debian jessie 64
Contatti:

Re: python-tostring() decode problem

Messaggio da Alkatron »

Grazie 1k cosi

Codice: Seleziona tutto

root.text= locale.currency(23.70, grouping= True).decode('utf8')
funziona senza problemi.

Ciao e grazie di nuovo
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti