web-dev-qa-db-fra.com

Python Requêtes et Unicode

J'utilise la bibliothèque de requêtes pour interroger l'API Diffbot pour obtenir le contenu d'un article à partir d'une URL de page Web. Lorsque je visite une URL de requête que je crée dans mon navigateur, elle renvoie un objet JSON avec le texte en Unicode (à droite?) Par exemple (j'ai raccourci un peu le texte):

{"icon": "http://mexico.cnn.com/images/ico_mobile.jpg", "text": "CIUDAD DE MÉXICO (CNNMéxico)\u2014 Kassandra Guazo Cano tiene 32 años, pero este domingo participó por primera vez en una elección.\n\"No había sacado mi (credencial del) IFE (Instituto Federal Electoral) porque al hacer el trámite hay mucha mofa cuando ven que tu nombre no coincid con con y y otros documentos de acuerdo con su nueva identidad.\nSánchez dice que los solicitantes no son discriminados, pero la experiencia de Kassanda es diferente:\"hay que pagar un licenciado, dos peritos (entre ellos un endocrinólogo). Además, el juez dicta sentencia para el cambio de nombre y si no es favorable tienes que esperar otros cuatro años para volver a demandar al registro civil\".\nAnte esta situación, el Consejo para Prevenir y Eliminar la sculina, los transgénero votan - México: Voto 2012 - Nacional", "url": "http://mexico.cnn.com/nacional/2012/07/02/02/con-apariencia-de-mujer-e-identidad-masculina-los-transexuales-votan "," xpath ":"/HTML [1]/BODY [1]/SECTION [5]/DIV [1]/ARTICLE [1]/DIV [1]/DIV [6] "}

Lorsque j'utilise la bibliothèque de requêtes python comme suit:

def get_article(self, params={}):
  api_endpoint = 'http://www.diffbot.com/api/article'
  params.update({
    'token': self.dev_token,
    'format': self.output_format,
  })
  req = requests.get(api_endpoint, params=params)
  return json.loads(req.content)

Il renvoie ceci (encore une fois, j'ai raccourci un peu le texte):

{u'url ': u'http: //mexico.cnn.com/nacional/2012/07/02/con-apariencia-de-mujer-e-identidad-masculina-los-transexuales-votan', u'text ': u'CIUDAD DE M\xc9XICO (CNNM\xe9xico)\u2014 Kassandra Guazo Cano tiene 32 a\xf1os, pero este domingo particip\xf3 por primera vez en una elecci\xf3n.\n "No hab\xeda sacado mi ( credencial del) IFE (Instituto Federal Electoral) porque al hacOyuky Mart\xednez Col\xedn, tambi\xe9n transg\xe9nero, y que estaba acompa\xf1ada de sus dos hijos y su mam\xe1.\nAmbas trabajan como activistas en el Centro de Apoyo a las Identidades Trans, AC, donde participan en una campa\xf1a de prevenci\xf3n de enfermedades sexuales.\n "Quisi\xe9ramos que no solo nos vean como trabajadoras sexuales o estilistas, sino que luchamos por nuestros derechos", dés Kassandra mientras sonr\xede, sostiene su credencial de elector y levanta su pulgar entintado. ', U'title': u'Con apariencia de mujer e identidad masculina, los transg\xe9nero votan - M\xe9xico: Voto 2012 - Nacional ', u'xpath ': u '/ HTML [1]/CORPS [1]/SECTION [5]/DIV [1]/ARTICLE [1]/DIV [1]/DIV [6]', u'icon ': u'http: // mexico.cnn.com/images/ico_mobile.jpg '}

Je ne comprends pas très bien Unicode. Comment m'assurer que ce que j'obtiens avec les demandes est toujours Unicode?

25
Javaaaa

Vous pouvez utiliser req.text au lieu de req.content pour vous assurer d'obtenir Unicode. Les méthodes sont décrites dans:

http://docs.python-requests.org/en/latest/api/#main-interface

38
TTT

Concernant le "je ne comprends pas tout à fait unicode", il y a un introduction divertissante sur Unicode par Joel Spolsky et l'officiel Python Unicode HowTo qui est une lecture de 10 minutes et couvre tout Python spécifique.

Les demandes de documents indiquent que la demande retournera toujours unicode, et le contenu d'exemple que vous avez publié est en fait unicode (notez le u'' syntaxe de chaîne? C'est la syntaxe de Python pour les chaînes unicode.), Donc il n'y a pas de problème. Notez que si vous affichez la réponse JSON dans un navigateur Web, le u'' ne sera pas là car c'est une propriété de la façon dont Python stocke une chaîne.

Si l'unicode est important pour votre application, veuillez ne pas essayer de faire face sans vraiment connaître l'unicode. Vous êtes dans un monde de douleur, les problèmes de jeu de caractères sont extrêmement frustrants à déboguer si vous ne savez pas ce que vous faites. La lecture des deux articles mentionnés ci-dessus peut prendre une demi-heure.

14
Simon