Beim Exportieren der Benutzerliste im CSV-Format führt die Verwendung von Zeichen, die keine ASCII-Zeichen und Zahlen sind, im Feld name zu fehlerhaften Zeichen:
Ich habe zwei Lösungen für dieses Problem gefunden:
-
Erstellen Sie eine neue XLSX-Datei in Excel, importieren Sie die Daten über die Option „Aus Text/CSV“ und stellen Sie die Dateiquelle auf
Unicode (UTF-8)ein.
-
Öffnen Sie die CSV-Datei mit Notepad++ und ändern Sie die Kodierung von
UTF-8inUTF-8-BOM.
Ergebnis:
Obwohl beide Lösungen wirksam sind, um das Symptom zu beheben, gehen sie nicht auf die Grundursache des Problems ein.
Nach weiterer Recherche bin ich auf eine mögliche langfristige Lösung für dieses Problem gestoßen:
// Prozess zur Generierung einer CSV-Datei, wobei 'body' die Datenzeilen und 'header' die Kopfzeile darstellt.
const csv = body.reduce((prev, current) => `${prev}\r\n${current}`, header);
// Excel benötigt ein Byte Order Mark (BOM), um anzuzeigen, dass die Datei UTF-8-kodiert ist.
const BOM = Buffer.from('\uFEFF');
// Verketten Sie den BOM-Header mit dem generierten CSV-Inhalt.
const bomCsv = Buffer.concat([BOM, Buffer.from(csv)]);
// Konvertieren Sie den resultierenden Puffer in eine Zeichenkette und geben Sie ihn zurück.
return bomCsv.toString();
// Sobald die zurückgegebene Zeichenkette heruntergeladen und mit Excel geöffnet wird, werden die chinesischen Inhalte korrekt in der Tabelle angezeigt.
Im Wesentlichen benötigt Excel Metadaten, um die Kodierung von CSV-Dateien anzugeben. Microsoft hat zu diesem Zweck den BOM (Byte Order Mark)-Header eingeführt. Obwohl dieser Header von anderer Tabellenkalkulationssoftware möglicherweise ignoriert wird, ist er für Excel von erheblicher Bedeutung. Um die Kompatibilität zwischen verschiedenen Programmen zu gewährleisten, ist es unerlässlich, den BOM-Header bei der CSV-Generierung einzuschließen.
Ich frage mich, ob Ihr Team plant, diese Lösung in der kommenden Version zu integrieren? Dies könnte potenziell die Sprachunterstützung erweitern und die Häufigkeit von Fehlern reduzieren.
Vielen Dank für Ihre Aufmerksamkeit in dieser Angelegenheit!
Referenz:
https://www.zhihu.com/question/21869078/answer/350728339



