CSV dans UTF-8 et Microsoft Excel

Dans ma request, j'ai une list d'articles pouvant être exportés vers CSV.

Pour cela, je crée un Blob comme suit:

var BOM = "\ufeff"; var blob = new Blob([csv], { type: 'csv;charset=utf-8' }); 

Dans le cas où datatables de cette list contiennent des caractères spéciaux, le file exporté n'a pas été ouvert correctement dans MS Excel. J'ai donc ajouté une ligne à mon code (la deuxième ligne de l'extrait suivant), comme je l'ai trouvé dans de nombreux forums de Q & A:

  var BOM = "\ufeff"; var csv = BOM + csv; var blob = new Blob([csv], { type: 'csv;charset=utf-8' }); var BOM = "\ ufeff";  var BOM = "\ufeff"; var csv = BOM + csv; var blob = new Blob([csv], { type: 'csv;charset=utf-8' }); var csv = BOM + csv;  var BOM = "\ufeff"; var csv = BOM + csv; var blob = new Blob([csv], { type: 'csv;charset=utf-8' }); var blob = new Blob ([csv], {  var BOM = "\ufeff"; var csv = BOM + csv; var blob = new Blob([csv], { type: 'csv;charset=utf-8' }); tapez: 'csv; charset = utf-8'  var BOM = "\ufeff"; var csv = BOM + csv; var blob = new Blob([csv], { type: 'csv;charset=utf-8' }); 

Cela fonctionne: le CSV est ouvert correctement dans Excel, mais lors de la sauvegarde du file, il est sauvegardé au format de text et non comme CSV. Ce qui signifie que j'ai besoin de "Enregistrer sous" le file et de modifier le type par défaut si je veux qu'il soit enregistré correctement.

Est-ce vraiment comme ça? Dois-je choisir entre les deux options: voir le file ou l' save correctement?

Oui, c'est dommage, mais c'est vraiment comme ça. À partir d' Excel un CSV est codé ANSI par défaut et il n'y a pas de possibilité directe d'save CSV dans n'importe quel encoding unicode. Microsoft suggère d'utiliser le Notepad pour modifier l'enencoding. Reportez-vous à la section Comment save un carnet d'adresses dans un file CSV en utilisant le format d'enencoding UTF-8 afin que le file CSV puisse être importé dans Windows Mail . Voir aussi Comment puis-je save un csv avec un encoding utf-8 à l'aide d'Excel 2013?

Seule une autre possibilité consiste à utiliser VBA et à créer le file CSV en utilisant ADODB.Stream ou Scripting.FileSystemObject .

Comment utiliser ADODB.Stream pour créer un file CSV encodé unicode est déjà répondu plusieurs fois. Par exemple: comment exporter Excel vers un file csv avec "|" délimité et utf-8 code . Modifiez simplement le délimiteur "|" à ",". C'est l'approche basique. Peut-être que vous devez l'étendre pour fournir un délimiteur de text également, si le délimiteur peut faire partie des données.

Utilisation de la méthode CreateTextFile de Scripting.FileSystemObject est plus simple, mais ne permet qu'à Unicode qui est UTF-16LE plutôt que UTF-8.