Mon programme reçoit chaîne JSON de l'aide requests
serveur web. Ensuite, il a converti en un dictionnaire avec json.loads()
. Après que je vous écris quelques éléments de ce dictionnaire dans une boucle du fichier:Erreur lors de la conversion des entités html hiéroglyphes/symboles spéciaux [python]
parsedJSON = json.loads(cleanJSON)
for i in range(len(parsedJSON['list'])):
f.write(html.unescape(parsedJSON['list'][i][4]) + ' - ' + html.unescape(parsedJSON['list'][i][3]) + '\n')
Le problème est que JSON peut contenir Hiéroglyphes japonais/chinois et autres symboles spéciaux. Dans la chaîne JSON, je sais qu'ils sont stockés en tant qu'entités html (par exemple, cette chaîne '&# 12493;&# 12467;&# 12496;&# 12473;
' est ネ コ バ ス).
Pour convertir des entités html à une forme lisible par l'homme, j'utilise html.unescape('someHTMLEntity')
. Sur mon Debian 8 et d'autres systèmes linux il fonctionne parfaitement - codes hiéroglyphe sont convertis en Hiéroglyphes réels, etc. Mais sous Windows (le 7, 8.1 et 10) Je reçois cette erreur:
Traceback (most recent call last):
File "main.py", line 144, in <module>
f.write(html.unescape(parsedJSON['list'][i][4]) + ' - ' + html.unescape(par
sedJSON['list'][i][3]) + '\n')
File "C:\Users\dangerous\AppData\Local\Programs\Python\Python36-32\lib\encodin
gs\cp1251.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 12-15: c
haracter maps to <undefined>
Le programme se bloque lorsque la fonction html.unescape('someHieroglyphCode')
est exécutée.
Comme je comprends que c'est un problème d'encodage spécifique à Windows, mais je ne comprends pas exactement ce que.