616 Stimmen

Ist es möglich, Excel zu zwingen, UTF-8 CSV-Dateien automatisch zu erkennen?

Ich entwickle einen Teil einer Anwendung, der für den Export einiger Daten in CSV-Dateien verantwortlich ist. Die Anwendung verwendet immer UTF-8 aufgrund ihrer mehrsprachigen Natur auf allen Ebenen. Aber das Öffnen solcher CSV-Dateien (die z.B. Diakritika, kyrillische Buchstaben, griechische Buchstaben enthalten) in Excel führt nicht zu den erwarteten Ergebnissen, es wird etwas wie „/¤, –/¶ angezeigt. Und ich weiß nicht, wie ich Excel dazu bringen kann zu verstehen, dass die geöffnete CSV-Datei in UTF-8 kodiert ist. Ich habe auch versucht, UTF-8 BOM EF BB BF anzugeben, aber Excel ignoriert das.

Gibt es einen Workaround?

P.S. Welche Tools könnten sich möglicherweise so verhalten wie Excel?


UPDATE

Ich muss sagen, dass ich die Community mit der Formulierung der Frage verwirrt habe. Als ich diese Frage gestellt habe, habe ich nach einem Weg gefragt, eine UTF-8 CSV-Datei in Excel ohne Probleme für einen Benutzer, auf eine fließende und transparente Weise zu öffnen. Allerdings habe ich eine falsche Formulierung verwendet und nach einer automatischen Lösung gefragt. Das ist sehr verwirrend und steht im Widerspruch zur VBA-Makroautomatisierung. Es gibt zwei Antworten auf diese Frage, die ich am meisten schätze: die allererste Antwort von Alex, die ich akzeptiert habe; und die zweite von Mark, die etwas später erschienen ist. Aus usability-Sicht schien Excel einen Mangel an benutzerfreundlichem UTF-8-CSV-Support zu haben, daher halte ich beide Antworten für korrekt, und ich habe Alex' Antwort zuerst akzeptiert, weil sie wirklich feststellte, dass Excel das nicht transparent konnte. Das ist das, was ich hier mit automatisch verwechselt habe. Marks Antwort fördert einen komplizierteren Weg für fortgeschrittenere Benutzer, um das erwartete Ergebnis zu erzielen. Beide Antworten sind großartig, aber Alex' Antwort passt etwas besser zu meiner nicht klar spezifizierten Frage.


UPDATE 2

Fünf Monate nach der letzten Bearbeitung habe ich festgestellt, dass die Antwort von Alex aus irgendeinem Grund verschwunden ist. Ich hoffe wirklich, dass es kein technisches Problem war und ich hoffe, dass es keine weitere Diskussion darüber gibt, welche Antwort jetzt besser ist. Deshalb akzeptiere ich Marks Antwort als die beste.

1 Stimmen

Kannst du tabellengetrennte Dateien verwenden? Wenn ja, hast du vielleicht mehr Glück.

11 Stimmen

Office 2010+: beste funktioniert: UTF-16LE mit BOM und \t als Trennzeichen. Funktioniert in englischen und nicht englischen Excel-Einstellungen. Kann Strg-S drücken, ohne das Dateiformat auszuwählen, usw. Wird Unicode-Zeichen beibehalten.

0 Stimmen

@Duncan ganz ehrlich, ich bin verwirrt und es ist "schwierig zu beurteilen". Ich habe alex's Antwort vor mehr als 2 Jahren akzeptiert (beide am 14. Mai) und dann hat Mark geantwortet und einen trickreichen Workaround vorgeschlagen (den ich tatsächlich nicht überprüft habe), der überraschenderweise mehr Punkte bei meiner Frage erzielt hat, die überraschenderweise auch populär wurde. Wir haben schon vor langer Zeit den Excel-Support in meinem Projekt abgelehnt, und ich möchte alex's Reputation nicht schmälern, weil Excel anscheinend, und wahrscheinlich immer noch (bitte korrigiere mich, wenn ich falsch liege), CSV falsch behandelt. Es ist schwierig zu sagen, tut mir leid.

1voto

podolinek Punkte 166

Arbeitslösung für Office 365

  • Speichern in UTF-16 (ohne LE, BE)
  • Verwenden Sie den Trennzeichen \t

Code in PHP

$header = ['císlo', 'vytvoreno', 'ešcržýáíé'];
$fileName = 'excel365.csv';
$fp = fopen($fileName, 'w');
fputcsv($fp, $header, "\t");
fclose($fp);

$handle = fopen($fileName, "r");
$contents = fread($handle, filesize($fileName));
$contents = iconv('UTF-8', 'UTF-16', $contents);
fclose($handle);

$handle = fopen($fileName, "w");
fwrite($handle, $contents);
fclose($handle);

0 Stimmen

Was meinst du mit keinem LE oder BE. Es muss doch eines von beiden sein, oder?

1voto

lpinto.eu Punkte 2067

Ich stand vor dem gleichen Problem vor ein paar Tagen und konnte keine Lösung finden, weil ich das import from csv-Feature nicht nutzen kann, da alles als Zeichenfolge formatiert wird.

Meine Lösung bestand darin, die Datei zuerst mit Notepad++ zu öffnen und die Kodierung in ASCII zu ändern. Dann habe ich einfach die Datei in Excel geöffnet und es hat wie erwartet funktioniert.

1voto

Dan Punkte 2541
  1. Laden Sie LibreOffice Calc herunter und installieren Sie es
  2. Öffnen Sie die CSV-Datei Ihrer Wahl in LibreOffice Calc
  3. Danken Sie den Himmeln, dass ein Import-Text-Assistent auftaucht...
  4. ...wählen Sie Ihre Trennzeichen- und Zeichenkodierungsoptionen aus
  5. Wählen Sie die resultierenden Daten in Calc aus und kopieren Sie sie in Excel

0voto

yoyo Punkte 7630

Ich erstelle CSV-Dateien aus einer einfachen C#-Anwendung und hatte das gleiche Problem. Meine Lösung bestand darin, sicherzustellen, dass die Datei mit UTF8-Codierung geschrieben wird, wie folgt:

// Verwenden Sie die UTF8-Codierung, damit Excel mit Akzenten und ähnlichem in Ordnung ist.
using (StreamWriter writer = new StreamWriter(path, false, Encoding.UTF8))
{
    SaveCSV(writer);
}

Ursprünglich hatte ich den folgenden Code, mit dem Akzente in Notepad++ gut aussahen, aber in Excel verunstaltet wurden:

using (StreamWriter writer = new StreamWriter(path))
{
    SaveCSV(writer);
}

Ihre Erfahrungen können variieren - ich verwende .NET 4 und Excel aus Office 365.

0voto

pakalbekim Punkte 139

Ich habe alles ausprobiert, was ich in diesem Thread und ähnlichen gefunden habe, nichts hat vollständig funktioniert. Das Importieren in Google Sheets und dann einfach als CSV herunterladen hat jedoch wie ein Zauber funktioniert. Probier es aus, wenn du an meinen Frustrationspunkt kommst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X