Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python Requests and Unicode

I am using the requests library to query the Diffbot API to get contents of an article from a web page url. When I visit a request URL that I create in my browser, it returns a JSON object with the text in Unicode (right?) for example (I shortended the text somewhat):

{"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 coincide con tu 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/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]"}

When I use the python request library as follows:

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) 

It returns this (again note that I shortened the text somewhat):

{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, A.C., 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", dice 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]/BODY[1]/SECTION[5]/DIV[1]/ARTICLE[1]/DIV[1]/DIV[6]', u'icon': u'http://mexico.cnn.com/images/ico_mobile.jpg'}

I don't quite understand Unicode. How to make sure that what I get with requests is still Unicode?

like image 552
Javaaaa Avatar asked Jul 11 '12 14:07

Javaaaa


People also ask

Does Python work with unicode?

Python's string type uses the Unicode Standard for representing characters, which lets Python programs work with all these different possible characters. Unicode (https://www.unicode.org/) is a specification that aims to list every character used by human languages and give each character its own unique code.

What does unicode () do in Python?

Remarks. If encoding and/or errors are given, unicode() will decode the object which can either be an 8-bit string or a character buffer using the codec for encoding. The encoding parameter is a string giving the name of an encoding; if the encoding is not known, LookupError is raised.

How do I get unicode in Python?

To include Unicode characters in your Python source code, you can use Unicode escape characters in the form \u0123 in your string. In Python 2. x, you also need to prefix the string literal with 'u'.


1 Answers

You can use req.text instead of req.content to ensure that you get Unicode. The methods are described in:

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

like image 200
TTT Avatar answered Oct 06 '22 00:10

TTT