web-dev-qa-db-ja.com

PythonリクエストとUnicode

要求ライブラリを使用してDiffbot APIにクエリを実行し、WebページのURLから記事のコンテンツを取得しています。ブラウザーで作成したリクエストURLにアクセスすると、Unicodeのテキストを含むJSONオブジェクトが返されます(右?)(テキストを少し短くしました)。

{「アイコン」:「http://mexico.cnn.com/images/ico_mobile.jpg」、「テキスト」:「CIUDAD DEMÉXICO(CNNMéxico)\ u2014 Kassandra Guazo Cano tiene 32años、pero este domingoparticipópor primera vez\n\"Nohabíasacado mi(credencial del)IFE(Instituto Federal Electoral)porque al hacer eltrámitehay mucha mofa cuando ven que tu nombre no con con con y y otoros documentos de acuerdo con su nueva identidad。\ nSánchezdice que los solicitantes no son discriminados、pero la experiencia de Kassanda es diferente:\ "hay que pagar un licenciado、dos peritos(entre ellos unendocrinólogo)。Además、el juez dicta senticia es tienes que esperar otros cuatroañospara volver a demandar al registro civil\"。\ nAnte estasituación、el Consejo para Prevenir y Eliminar la sculina、lostransgénerovotan-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 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 trabaiv como Apoyo a las Identidades Trans、AC、カンパ\ xf1a de prevenci\xf3n de enfermedades sexuales。\ n "Quisi\xe9ramos que no solo nos vean como trabajadoras sexuales o estilistas、sino que luchamos por" 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 '}

私はユニコードをよく理解していません。リクエストで取得したものがまだUnicodeであることを確認するにはどうすればよいですか?

25
Javaaaa

req.textの代わりにreq.contentを使用して、Unicodeを確実に取得できます。メソッドは次のとおりです。

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

38
TTT

「Unicodeをよく理解していません」に関して、 面白い入門書 Joel SpolskyによるUnicodeと公式の Python Unicode HowTo があります。 Python固有。

requests docs リクエストは常にユニコードを返し、投稿したコンテンツの例は実際にはユニコードであると言います(u''文字列構文?これはPythonのUnicode文字列の構文です。)、問題はありません。 WebブラウザーでJSON応答を表示する場合、u''は、Pythonが文字列を格納する方法のプロパティであるため、存在しません。

Unicodeがアプリケーションにとって重要である場合、Unicodeを実際に知らずに対処しようとしないでください。あなたが苦痛の世界にいるので、あなたが何をしているのかわからない場合、文字セットの問題はデバッグするのが非常にイライラします。上記の両方の記事を読むのに30分かかるかもしれません。

14
Simon