Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2646 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  ecrire chaine utf8 json à partir d'un dictionnaire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

ecrire chaine utf8 json à partir d'un dictionnaire

n°2310801
xilebo
noone
Posté le 05-02-2018 à 09:45:09  profilanswer
 

Bonjour,
 
je souhaite extraire des données d'un fichier excel ( avec le module xlrd ) pour ensuite générer des fichiers javascript contenant des variables json pouvant contenir des caractères utf8 ( génération de fichier de traduction de langue ). Je me retrouve dans la problématique suivante ne maitrisant absolument pas le python :
 

Code :
  1. >>> t = { string : "에스디 없음" }
  2. Traceback (most recent call last):
  3.   File "<pyshell#2>", line 1, in <module>
  4.     t = { string : "에스디 없음" }
  5. NameError: name 'string' is not defined
  6. >>> t = { "string" : "에스디 없음" }
  7. >>>
  8. >>>
  9. >>> print (t)
  10. {'string': '에스디 없음'}
  11. >>>
  12. >>>
  13. >>> import json
  14. >>> j = json.dumps(t)
  15. >>> print (j)
  16. {"string": "\uc5d0\uc2a4\ub514 \uc5c6\uc74c"}
  17. >>> k = json.dumps(t).encode("utf8" )
  18. >>> print (k)
  19. b'{"string": "\\uc5d0\\uc2a4\\ub514 \\uc5c6\\uc74c"}'
  20. >>>


 
je ne sais pas comment faire pour que mon "dumps" que je vais écrire ensuite dans un fichier puisse contenir non pas la traduction ascii des caractères utf8 ( avec le \u ) mais directement le caractère utf8.
 
Je pense que j'aurai un problème après, le fic.write n'acceptera peut être pas ma string mais ca sera un second sujet  :jap:  
 
Merci pour votre aide :)

mood
Publicité
Posté le 05-02-2018 à 09:45:09  profilanswer
 

n°2310803
xilebo
noone
Posté le 05-02-2018 à 09:54:52  profilanswer
 

bon, si je mets  
 

Code :
  1. j = json.dumps(t , ensure_ascii = False)


 
ca fonctionne.
 
Sauf que dans mon exemple ca fonctionne, je peux print(j) , mais dans mon code ,j'ai une erreur  
 


Error'charmap' codec can't encode character '\u2026' in position 756: character maps to <undefined>


 
Je suppose que cela veut dire qu'il y a un caractère non utf8 dedans ? Mais comment savoir lequel :p  
 
Et évidemment le write dans le fichier derrière échoue également mais bizarrement, pas à la même position :
 


file : bundle_en.js
Error'charmap' codec can't encode characters in position 2709-2715: character maps to <undefined>


 

n°2310813
masklinn
í dag viðrar vel til loftárása
Posté le 05-02-2018 à 12:20:49  profilanswer
 

xilebo a écrit :

bon, si je mets

 
Code :
  1. j = json.dumps(t , ensure_ascii = False)
 

ca fonctionne.

 

Sauf que dans mon exemple ca fonctionne, je peux print(j) , mais dans mon code ,j'ai une erreur

 


Error'charmap' codec can't encode character '\u2026' in position 756: character maps to <undefined>

 

Je suppose que cela veut dire qu'il y a un caractère non utf8 dedans ? Mais comment savoir lequel :p


Non, ça veut dire que dans ton bricolage le codec "charmap" est sélectionné et ne sait pas encoder U+2026 (HORIZONTAL ELLIPSIS).

 

1. json a une fonction `dump` qui sort directement dans un fichier (ou pseudo-fichier)
2. `open` en mode texte prend un encodage, donne lui le bon

Code :
  1. with open(a_file_path, mode='w', encoding='utf-8') as f:
  2.    json.dump(t, f, ensure_ascii=False)



Message édité par masklinn le 05-02-2018 à 12:21:07

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°2310820
xilebo
noone
Posté le 05-02-2018 à 13:29:13  profilanswer
 

Merci pour ta réponse :)
 
Comment je sélectionne le bon charmap, et surtout à quel endroit ?
 
J'ai réussi à m'en sortir de la façon suivante :  
- j'ai supprimé le caractère indésirable qui correspond au 3 petits points en un seul caractère ( à cause de l'auto completion de Excel ).
- je suis passé en écriture binaire wb + bytes( string, "utf8" ) mais je pense que ca revient au même à ce que tu m'as donné pour le open.
 
 
Pour finir, le résultat semble correct, pour autant, quand j'ouvre le fichier .js avec notepad++ , il n'arrive pas à reconnaitre l'encodage , je suis obligé de forcer utf8. Quand j'enregistre le résultat, je vois qu'il a rajouté le BOM au début. Ok. Sauf que si je prends le fichier original de mon prestataire ( fichier json ) , il n'y a pas de BOM, pourtant notepad++ arrive à détecter que le fichier est "utf8 sans BOM" directement.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  ecrire chaine utf8 json à partir d'un dictionnaire

 

Sujets relatifs
Méthode pour placer tous les mots du dictionnaire dans une phrase.Créer fiche magasin à partir d'un fichier csv
Écrire dans un fichier qui est en cours de lectureprobleme en programmation c "chaine de caracteres dans une fonction
[VB /VBA /VBS] Remplir un formulaire HTML a partir d'un wordSuppression accents d'un fichier UTF8 [RESOLU]
comment partager via un app hybride à partir des autres app installé ?ACCESS 2010 – Requête de sélection à partir d’un formulaire
Problème de parsing JSONEcrire un tableau dans une feuille de calcul
Plus de sujets relatifs à : ecrire chaine utf8 json à partir d'un dictionnaire


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)