Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
974 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

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR