web-dev-qa-db-fra.com

Python: convertir une chaîne de UTF-8 en Latin-1

Je me sens empilé ici en essayant de changer les encodages avec Python 2.5

J'ai une réponse XML, que je code en UTF-8: response.encode('utf-8'). C'est bon, mais le programme qui utilise cette information n'aime pas cet encodage et je dois le convertir en une autre page de code. Le vrai exemple est que j'utilise le module python ghostscript pour incorporer des données pdfmark dans un fichier PDF - le résultat final contient des caractères incorrects dans Acrobat.

J'ai fait de nombreuses combinaisons avec .encode() et .decode() entre 'utf-8' et 'latin-1' et cela me rend folle, car je ne parviens pas à obtenir un résultat correct.

Si je produis la chaîne dans un fichier avec .encode('utf-8') puis convertis ce fichier de UTF-8 à CP1252 (ou latin-1) avec i.e. iconv.exe et intégre les données, tout va bien.

En gros, quelqu'un peut-il m'aider à convertir le caractère á qui est codé en UTF-8 au format hex: C3 A1 en latin-1 au format hex: E1?

Merci d'avance

15
romor

Au lieu de .encode('utf-8'), utilisez .encode('latin-1').

19
data="UTF-8 data"
udata=data.decode("utf-8")
data=udata.encode("latin-1","ignore")

Devrait le faire.

5
Utku Zihnioglu

Pouvez-vous fournir plus de détails sur ce que vous essayez de faire? En général, si vous avez une chaîne unicode, vous pouvez utiliser encoder pour la convertir en chaîne avec un encodage approprié. Par exemple:

>>> a = u"\u00E1"
>>> type(a)
<type 'unicode'>
>>> a.encode('utf-8')
'\xc3\xa1'
>>> a.encode('latin-1')
'\xe1'
3
amit

Si les réponses précédentes ne résolvent pas votre problème, vérifiez la source des données qui ne seront pas imprimées/converties correctement.

Dans mon cas, j’utilisais json.load sur des données incorrectement lues à partir d’un fichier sans utiliser le encoding="utf-8". Essayer de décoder/encoder la chaîne résultante en latin-1 ne sert à rien ...

0
handle