Post chaîne unicode service web à l'aide de Python Demandes de la bibliothèque
Je suis en train de poster un extrait de texte contenant fantaisie unicode des symboles à un service web à l'aide de la les demandes de la bibliothèque. Je suis à l'aide de Python 3.5.
text = "Två dagar kvar🎉🎉"
r = requests.post("http://json-tagger.herokuapp.com/tag", data=text)
print(r.json()
- Je obtenir une UnicodeEncodeError, mais je ne peux pas comprendre ce que je fais mal, de mon côté, les docs pour les demandes ne parle que de l'unicode dans les requêtes GET de ce que je vois.
UnicodeEncodeError Traceback (most recent call last)
<ipython-input-125-3ebcae3d7918> in <module>()
19 print("cleaned : " + line)
20
---> 21 r = requests.post("http://json-tagger.herokuapp.com/tag", data=line)
22 sentences = r.json()['sentences']
23 for sentence in sentences:
//anaconda/lib/python3.4/site-packages/requests/api.py in post(url, data, json, **kwargs)
105 """
106
--> 107 return request('post', url, data=data, json=json, **kwargs)
108
109
//anaconda/lib/python3.4/site-packages/requests/api.py in request(method, url, **kwargs)
51 # cases, and look like a memory leak in others.
52 with sessions.Session() as session:
---> 53 return session.request(method=method, url=url, **kwargs)
54
55
//anaconda/lib/python3.4/site-packages/requests/sessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
466 }
467 send_kwargs.update(settings)
--> 468 resp = self.send(prep, **send_kwargs)
469
470 return resp
//anaconda/lib/python3.4/site-packages/requests/sessions.py in send(self, request, **kwargs)
574
575 # Send the request
--> 576 r = adapter.send(request, **kwargs)
577
578 # Total elapsed time of the request (approximately)
//anaconda/lib/python3.4/site-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
374 decode_content=False,
375 retries=self.max_retries,
--> 376 timeout=timeout
377 )
378
//anaconda/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, **response_kw)
557 httplib_response = self._make_request(conn, method, url,
558 timeout=timeout_obj,
--> 559 body=body, headers=headers)
560
561 # If we're going to release the connection in ``finally:``, then
//anaconda/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, timeout, **httplib_request_kw)
351 # conn.request() calls httplib.*.request, not the method in
352 # urllib3.request. It also calls makefile (recv) on the socket.
--> 353 conn.request(method, url, **httplib_request_kw)
354
355 # Reset the timeout for the recv() on the socket
//anaconda/lib/python3.4/http/client.py in request(self, method, url, body, headers)
1086 def request(self, method, url, body=None, headers={}):
1087 """Send a complete request to the server."""
-> 1088 self._send_request(method, url, body, headers)
1089
1090 def _set_content_length(self, body):
//anaconda/lib/python3.4/http/client.py in _send_request(self, method, url, body, headers)
1123 # RFC 2616 Section 3.7.1 says that text default has a
1124 # default charset of iso-8859-1.
-> 1125 body = body.encode('iso-8859-1')
1126 self.endheaders(body)
1127
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 14-15: ordinal not in range(256)
Solution de CONTOURNEMENT: - je supprimer tous les caractères unicode à partir du texte de la "émoticône" bloc U+1F600 - U+1F64F et les Symboles Et les Pictogrammes" bloc U+1F300 - U+1F5FF selon cette réponse avec le code suivant, car je n'ai pas besoin des émoticônes et des images pour l'analyse:
text = re.sub(r'[^\u1F600-\u1F64F ]|[^\u1F300-\u1F5FF ]',"",text)
Mise à JOUR Le créateur du service web a corrigé cela maintenant et la mise à jour de la documentation. Tout ce que vous avez à faire est d'envoyer une chaîne codée en Python 3:
""Två dagar kvar🎉🎉".encode("utf-8")
OriginalL'auteur mattiasostmar | 2016-01-05
Vous devez vous connecter pour publier un commentaire.
Il n'est pas évident de ce type de contenu json-tagger.herokuapp.com attend (les exemples sont contradictoires). Vous pouvez essayer d'afficher les données sous forme de texte:
Ou vous pourriez essayer de l'envoyer en tant que
application/x-www-form-urlencoded
:Le serveur peut rejeter à la fois, d'accepter, d'accepter une mais pas l'autre, ou de s'attendre à un autre format (par exemple,
application/json
), etc.OriginalL'auteur jfs