2010-04-27 3 views
3

Je suis en train de lire mes e-mails en utilisant un script Python (Python 2.5 et PyPy) Certains de mes résultats ne sont pas en ASCII et je reçois des chaînes comme ceci:encodage Python ISO UTF8

= ISO -8859-7? B? 0OXm7/Dv8d/hIPP07 + 0gyuno4enx/u3h? = »

Est-il possible de le décoder et convertir en utf-8 afin que je puisse le traiter? J'ai essayé .decode ('ISO-8859-7') mais j'ai eu la même chaîne

Répondre

5
import email.header as eh 

unicode_data= u''.join(
    str_data.decode(codec or 'ascii') 
    for str_data, codec 
    in eh.decode_header('=?ISO-8859-7?B?0OXm7/Dv8d/hIPP07+0gyuno4enx/u3h?=')) 
# unicode_data now is u'Πεζοπορία στον Κιθαιρώνα' 

Vous devriez travailler ici avec unicode_data. Toutefois, si vous (pensez-vous) besoin UTF-8 chaîne encodée, vous pouvez:

utf8data= unicode_data.encode('utf-8') 

Mise à jour: J'ai changé l'appel .decode pour répondre aux cas où la codec est None (par exemple eh.decode_header('plain text'))

+0

@Tzotziou : +1 mais s'il vous plaît n'utilisez pas unicodedata comme un "nom de variable"; c'est un module. –

+0

@John: vous avez raison. Merci pour votre commentaire. – tzot