I file CSV esportati hanno caratteri illeggibili

Quando si esporta l’elenco utenti in formato CSV, se il nome contiene caratteri diversi da ASCII e numeri, si ottengono caratteri illeggibili:

Ho trovato due soluzioni per affrontare questo problema:

  1. Creare un nuovo file XLSX in Excel, importare i dati utilizzando l’opzione “Da testo/CSV” e impostare l’Origine file su Unicode (UTF-8).


    image

  2. Utilizzare Notepad++ per aprire il file CSV e modificare la codifica da UTF-8 a UTF-8-BOM.

Risultato:

Nonostante la loro efficacia nel risolvere il sintomo, entrambe queste soluzioni affrontano il problema senza affrontare la sua causa principale.


Dopo ulteriori ricerche, ho trovato una potenziale soluzione a lungo termine a questo problema:

// Processo per generare un CSV, con 'body' che rappresenta le righe di dati e 'header' come riga di intestazione.
const csv = body.reduce((prev, current) => `${prev}\r\n${current}`, header);

// Excel richiede un Byte Order Mark (BOM) per indicare che il file è codificato in UTF-8.
const BOM = Buffer.from('\uFEFF');

// Concatenare l'intestazione BOM con il contenuto CSV generato.
const bomCsv = Buffer.concat([BOM, Buffer.from(csv)]);

// Convertire il buffer risultante in una stringa e restituirla.
return bomCsv.toString();

// Una volta che la stringa restituita viene scaricata e aperta con Excel, visualizzerà correttamente il contenuto cinese nel foglio di calcolo.

In sostanza, Excel richiede metadati per specificare la codifica dei file CSV. Microsoft ha introdotto l’intestazione BOM (Byte Order Mark) a questo scopo. Sebbene questa intestazione possa essere ignorata da altri software di fogli di calcolo, è di grande importanza per Excel. Per garantire la compatibilità tra software, è essenziale includere l’intestazione BOM durante la generazione del CSV.

Sono curioso di sapere se il tuo team ha in programma di integrare questa soluzione nella prossima versione? Farlo potrebbe potenzialmente espandere il supporto linguistico e ridurre il verificarsi di bug.

Grazie per la tua attenzione a questa questione!

Riferimento:
https://www.zhihu.com/question/21869078/answer/350728339

1 Mi Piace