J'ai un code python qui lit une donnée de page depuis Confluence en utilisant l'API REST, puis en utilisant ces données crée une nouvelle page dans Confluence . Lors de la publication des données, le code renvoie l'erreur ci-dessous:Python post demande throws UnicodeEncodeError: le codec 'ascii' ne peut pas encoder le caractère '
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 48108: ordinal not in range(128)
Cependant, cela fonctionne assez bien dans Postman. Ma conjecture est que le facteur gère l'encodage. J'ai trouvé beaucoup de réponses qui suggéraient d'utiliser str.encode('utf-8')
et str.encode('ascii', 'ignore')
mais aucune n'a fonctionné pour moi. J'ai également essayé:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
mais en vain. Si j'utilise l'un de ces pour coder, alors je reçois 500 erreur interne tout en tirant la demande de poste.
Voici mon code python: get_template_data
obtient les détails de la page de confluence et l'utilise dans la demande de publication pour créer une nouvelle page. La ligne de coup critique est r = requests.post(url, headers=headers, data=post_body_str)
. Donc, il est probable que les données dans le post_body_str
ont quelque chose à voir avec cela.
Le dessous est le stracktrace:
Traceback (most recent call last):
File "new_status.py", line 216, in <module>
main()
File "new_status.py", line 193, in main
create_weekly_status_page(weekly_status_str,template_data)
File "new_status.py", line 79, in create_weekly_status_page
url = 'https://confluence.abc.com/rest/api/content/'
File "/Library/Python/2.7/site-packages/requests/api.py", line 110, in post
return request('post', url, data=data, json=json, **kwargs)
File "/Library/Python/2.7/site-packages/requests/api.py", line 56, in request
return session.request(method=method, url=url, **kwargs)
File "/Library/Python/2.7/site-packages/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/Library/Python/2.7/site-packages/requests/sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "/Library/Python/2.7/site-packages/requests/adapters.py", line 423, in send
timeout=timeout
File "/Library/Python/2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 594, in urlopen
chunked=chunked)
File "/Library/Python/2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 361, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1053, in request
self._send_request(method, url, body, headers)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1093, in _send_request
self.endheaders(body)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1049, in endheaders
self._send_output(message_body)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 897, in _send_output
self.send(message_body)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 869, in send
self.sock.sendall(data)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 721, in sendall
v = self.send(data[count:])
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 687, in send
v = self._sslobj.write(data)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 52926: ordinal not in range(128)
Aussi, j'utilise body.export_view
tout en obtenant des données de modèle, car cette page contient des macros et je ne veux pas des macros pour copiés, mais plutôt les résultats des macros pour être copié. Par conséquent, en utilisant body.export_view
.
Je suis tout à fait nouveau à Python. Et écrire cela pour automatiser quelques trucs et apprendre Python à côté. J'apprécierai de l'aide/des pointeurs.
Python Version: 2.7.10