[Resolu] FileReader et caractères accentués

FileReader et caractères accentués [Resolu] - Javascript/Node.js - Programmation

Marsh Posté le 06-06-2015 à 11:43:23    

Bonjour tout le monde,
 
Je débute en javascript et j'ai un gros problème que je n'arrive pas à résoudre seul. Mon programme récupère un fichier entré par l'utilisateur via un <input type="file" id="fileInput"> dans mon fichier html, et ensuite je parse son contenu dans un script JS.
 
Je récupère son contenu en passant par un FileReader de la manière suivante :
 
var reader = new FileReader();
reader.onload = function(e) {
    var contents = reader.result;
    parseFile(contents);
}
reader.readAsText(file);

 
Tout ceci marche très bien sans caractères accentués. Mais quand j'ajoute des caractères accentués, la variable reader.result contient des caractères non-reconnus. Peu importe que je l'affiche via la fonction alert(), directement sur la page html ou encore que je la teste via un expression régulière. Alors que pourtant, en écrivant en dur dans mon fichier JS ou HTML des caractères accentués, ils sont bien affichés à l'écran et match bien les expressions régulière. C'est logique étant donné que ces deux fichiers sont encodés en UTF-8 et que j'ai la balise <meta charset="utf-8"> dans le fichier HTML. Pourtant, le fichier txt que j'utilise est lui aussi encodé en UTF-8 (je l'ai vérifié via Notepad++), mais rien n'y fait, je n'arrive à afficher son contenu avec accents correctement.
 
La fonction reader.readAsText prend en argument également l'encodage, et par défaut c'est l'UTF-8. J'ai ajouté le 2e argument en précisant 'UTF-8' mais pas d'amélioration.
 
Vous avez une idée de ce que j'ai pu oublier ?
 
Merci par avance :jap:
 
Edit : je précise que je suis sur la dernière version de Chrome.


Message édité par fugacef le 07-06-2015 à 18:12:11
Reply

Marsh Posté le 06-06-2015 à 11:43:23   

Reply

Marsh Posté le 06-06-2015 à 14:45:52    

Selon cette doc : https://developer.mozilla.org/en-US [...] readAsText
readAsText prendrait un second param qui est l'encodage, ceci dit par défaut ca serait utf-8 :/
As-tu essayé sur une autre browser ? En googlant, je suis tombé sur des rapports de bug concernant l'implémentation de cette méthode dans Chrome.


Message édité par SICKofitALL le 06-06-2015 à 14:47:37

---------------
We deserve everything that's coming...
Reply

Marsh Posté le 06-06-2015 à 15:07:23    

J'ai testé sous FF41 et Chromium 45 ca fonctionne.
Sous Notepad++, converti tes fichiers en UTF8 sans BOM, en cas où.
 
Testé avec ce code :

Code :
  1. <input type="file" id="files" name="files[]" multiple />
  2. <output id="list"></output>
  3. <script>
  4. function handleFileSelect (e)
  5.  {
  6.   var
  7.    files = e.target.files,
  8.    reader = new FileReader ();
  9.   reader.onload = function (e)
  10.   {
  11.    var contents = reader.result;
  12.    console.log (contents);
  13.    alert (contents);
  14.   }
  15.   reader.readAsText (files[0]);
  16.  }
  17. document.getElementById ('files').addEventListener ('change', handleFileSelect, false);
  18. </script>


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 06-06-2015 à 22:58:05    

Je deviens fou... Je viens de tester ton code avec un fichier .txt contenant juste "é", et il me l'affiche avec un charactère non reconnu. Sur chrome 43 et FF 38 (ce sont des betas que tu as ?). :pfff:

Reply

Marsh Posté le 06-06-2015 à 23:44:41    

Oui, c'est des beta/nightly
Mes fichiers sont tous en utf8 sans BOM (le script et les fichiers lus)


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 07-06-2015 à 00:23:41    

SICKofitALL a écrit :

Oui, c'est des beta/nightly
Mes fichiers sont tous en utf8 sans BOM (le script et les fichiers lus)


Pareil mes fichiers sont en utf8 sans BOM. Ca m'a l'air plutôt magique cette histoire :o

Reply

Marsh Posté le 07-06-2015 à 18:10:57    

J'ai lu quelque part que la science de Notepad++ n'était pas exacte, qu'il devinait l'encodage plus qu'autre chose. Du coup, et j'aurais du commencer par ça, j'enregistre mes fichiers txt avec le bloc-note en précisant bien l'encodage, et miracle ça marche :o Bref, mission accomplie :jap: Merci de ton aide

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed