27

我正在使用 requests 库来查询 Diffbot API 以从网页 url 获取文章的内容。当我访问我在浏览器中创建的请求 URL 时,它会返回一个 JSON 对象,其中包含 Unicode 中的文本(对吗?)例如(我稍微缩短了文本):

{"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 primea 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 contrast 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 有利tienes que esperar otros cuatro años para volver a demandar al registro Civil\".\nAnte estaituació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]"}

当我使用python请求库如下:

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)

它返回这个(再次注意我稍微缩短了文本):

{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 primea 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 comoitarianas en el Centro de Apoyo a las Identidades Trans, AC, donde participan en una campa\xf1a de prevenci\xf3n de enfermedadessexuales.\n"Quisi\xe9ramos que no solo nos vean como trabajadorassexuales o estilistas, sino que luchamos por nuestros derechos",dice Kassandra mientras sonr\xede, sostiene su credencial de lector 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'}

我不太了解Unicode。如何确保我得到的请求仍然是 Unicode?

4

2 回答 2

41

您可以使用req.text而不是req.content确保您获得 Unicode。方法描述在:

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

于 2012-10-11T15:39:45.800 回答
15

关于“我不太了解 unicode”,Joel Spolsky 和官方Python Unicode HowTo有一本有趣的 Unicode 入门书,阅读时间为 10 分钟,涵盖了 Python 特定的所有内容。

requests 文档说请求将始终返回 unicode,而您发布的示例内容实际上是 unicode(注意字符串u''语法?这是 Python 的 unicode 字符串语法。),所以没有问题。请注意,如果您在 Web 浏览器中查看 JSON 响应,u''则不会出现 ,因为它是 Python 如何存储字符串的属性。

如果 unicode 对您的应用程序很重要,请不要在没有真正了解 unicode 的情况下尝试应对。您正处于一个痛苦的世界,如果您不知道自己在做什么,那么调试字符集问题会非常令人沮丧。阅读上述两篇文章可能需要半个小时。

于 2012-07-11T15:04:39.653 回答