2017-04-30 4 views
0

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.

Répondre

0

fixe explicitement à l'aide de codage UTF-8 dans open():

f = open('./dump', 'a', encoding='utf-8')