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")
Vous pouvez vérifier si les demandes de la bibliothèque peut faire des demandes à l'aide d'un autre encodage iso-8859-1. (Je suppose qu'il fait, ne pas être en mesure de le faire c'est un paralysant la limitation de ces jours). Pour votre solution, vous devez supprimer tous les caractères au-dessus de U+00FF, qui ne vous laisse avec un petit sous-ensemble des caractères latins.

OriginalL'auteur mattiasostmar | 2016-01-05