J'ai besoin d'exporter le tableau javascript vers un fichier CSV et de le télécharger. Je l'ai fait mais 'ı, ü, ö, ğ, ş' ce caractère ressemble à 'Ä ± ü ö ÄŸ ÅŸ' dans le fichier CSV. J'ai essayé de nombreuses solutions recommandées sur ce site mais cela n'a pas fonctionné pour moi.
J'ai ajouté mon extrait de code. Quelqu'un peut-il résoudre ce problème?
var csvString = 'ı,ü,ö,ğ,ş';
var a = window.document.createElement('a');
a.setAttribute('href', 'data:text/csv; charset=utf-8,' + encodeURIComponent(csvString));
a.setAttribute('download', 'example.csv');
a.click();
Cela dépend du programme qui ouvre le example.csv
fichier. À l'aide d'un éditeur de texte, l'encodage sera UTF-8
et les caractères ne seront pas malformés. Mais en utilisant Excel
l'encodage par défaut pour CSV
est ANSI
et non UTF-8
. Donc sans forcer Excel
en utilisant non pas ANSI
mais UTF-8
comme encodage, les caractères seront malformés.
Excel
peut être forcé en utilisant UTF-8
pour CSV
avec mise d'un BOM
( Byte Order Mark ) comme premiers caractères du fichier. BOM
par défaut pour UTF-8
est la séquence d'octets 0xEF,0xBB,0xBF
. On pourrait donc penser simplement à mettre "\xEF\xBB\xBF"
comme premier octet de la chaîne sera la solution. Mais ce serait sûrement trop simple, non? ;-) Le problème avec ceci est de savoir comment forcer JavaScript à ne pas prendre ces octets comme caractères. La "solution" utilise une "nomenclature universelle" "\uFEFF"
comme mentionné dans Caractères spéciaux (JavaScript) .
Exemple:
var csvString = 'ı,ü,ü,ğ,ş,#Hashtag,ä,ö';
var universalBOM = "\uFEFF";
var a = window.document.createElement('a');
a.setAttribute('href', 'data:text/csv; charset=utf-8,' + encodeURIComponent(universalBOM+csvString));
a.setAttribute('download', 'example.csv');
window.document.body.appendChild(a);
a.click();
Voir aussi Ajout d'une nomenclature UTF-8 à une chaîne/Blob .
En utilisant cela, l'encodage sera correct. Mais néanmoins, cela ne fonctionne correctement que si la virgule est le séparateur de liste par défaut dans vos paramètres régionaux Windows
. Sinon, si par exemple le point-virgule est le séparateur de liste par défaut dans vos paramètres régionaux Windows
, alors tout le contenu sera dans la première colonne sans le diviser par une virgule. Ensuite, vous devez également utiliser le point-virgule comme délimiteur dans le CSV
. Mais ceci est un autre problème et conduit à la conclusion pas en utilisant CSV
du tout mais en utilisant des bibliothèques qui peuvent créer directement Excel
des dossiers (*.xls
ou *.xlsx
).