Ich entwickle einen Teil einer Anwendung, die für den Export einiger Daten in CSV-Dateien verantwortlich ist. Die Anwendung verwendet UTF-8 aufgrund seiner Mehrsprachigkeit auf allen Ebenen immer. Das Öffnen solcher CSV-Dateien (z. B. diakritische Zeichen, kyrillische Buchstaben, griechische Buchstaben) in Excel führt jedoch nicht zu den erwarteten Ergebnissen, die so etwas wie anzeigen Г„/Г¤, Г–/Г¶
. Und ich weiß nicht, wie ich Excel dazu bringen soll, zu verstehen, dass die geöffnete CSV-Datei in UTF-8 codiert ist. Ich habe auch versucht, UTF-8-Stückliste anzugeben EF BB BF
, aber Excel ignoriert dies.
Gibt es eine Problemumgehung?
PS Welche Tools verhalten sich möglicherweise wie Excel?
AKTUALISIEREN
Ich muss sagen, dass ich die Community mit der Formulierung der Frage verwechselt habe. Als ich diese Frage stellte, fragte ich nach einer Möglichkeit, eine UTF-8-CSV-Datei in Excel ohne Probleme für einen Benutzer auf flüssige und transparente Weise zu öffnen. Ich habe jedoch eine falsche Formulierung verwendet und darum gebeten, dies automatisch zu tun . Das ist sehr verwirrend und kollidiert mit der VBA-Makroautomatisierung. Es gibt zwei Antworten auf diese Fragen, die ich am meisten schätze: die allererste Antwort von Alex https://stackoverflow.com/a/6002338/166589 , und ich habe diese Antwort akzeptiert; und die zweite von Mark https://stackoverflow.com/a/6488070/166589das ist etwas später erschienen. Unter dem Gesichtspunkt der Benutzerfreundlichkeit schien Excel keine gute benutzerfreundliche UTF-8-CSV-Unterstützung zu haben, daher halte ich beide Antworten für richtig und habe Alex 'Antwort zuerst akzeptiert, weil darin wirklich angegeben wurde, dass Excel dies nicht konnte das transparent. Damit habe ich hier automatisch verwechselt . Marks Antwort bietet fortgeschritteneren Benutzern eine kompliziertere Möglichkeit, das erwartete Ergebnis zu erzielen. Beide Antworten sind großartig, aber Alex 'Antwort passt etwas besser zu meiner nicht klar definierten Frage.
UPDATE 2
Fünf Monate später nach der letzten Bearbeitung habe ich festgestellt, dass Alex 'Antwort aus irgendeinem Grund verschwunden ist. Ich hoffe wirklich, dass es kein technisches Problem war und ich hoffe, dass es keine Diskussion mehr darüber gibt, welche Antwort jetzt größer ist. Also akzeptiere ich Marks Antwort als die beste.
\t
als Trennzeichen. Funktioniert in englischer und nicht englischer Excel-Einstellung. Kann drücken,Ctrl-S
ohne das Dateiformat usw. auszuwählen. Unicode-Zeichen bleiben erhalten.Antworten:
Alex ist korrekt, aber da Sie nach CSV exportieren müssen, können Sie den Benutzern beim Öffnen der CSV-Dateien folgende Ratschläge geben:
Auf diese Weise sollten die Sonderzeichen korrekt angezeigt werden.
quelle
Der UTF-8-Marker für die Bytereihenfolge weist Excel 2007+ darauf hin, dass Sie UTF-8 verwenden. (Siehe diesen SO-Beitrag ).
Falls jemand die gleichen Probleme hat wie ich, gibt die UTF8-Codierungsklasse von .NET in einem
GetBytes()
Aufruf keinen Marker für die Bytereihenfolge aus . Sie müssen Streams verwenden (oder eine Problemumgehung verwenden ), damit die Stückliste ausgegeben wird.quelle
UTF-8
zuUTF-8 with BOM
Der Fehler mit ignorierten Stücklisten scheint für Excel 2013 behoben zu sein. Ich hatte das gleiche Problem mit kyrillischen Buchstaben, aber das Hinzufügen von Stücklistenzeichen
\uFEFF
hat geholfen.quelle
$utf8_with_bom = chr(239) . chr(187) . chr(191) . $csvText
;Es ist unglaublich, dass es so viele Antworten gibt, aber keine beantwortet die Frage:
Die Antwort, die als akzeptierte Antwort mit mehr als 200 Up-Votes markiert ist, ist für mich nutzlos, da ich meinen Benutzern kein Handbuch zur Konfiguration von Excel geben möchte. Abgesehen davon: Dieses Handbuch gilt für eine Excel-Version, andere Excel-Versionen verfügen jedoch über andere Menüs und Konfigurationsdialoge. Sie benötigen für jede Excel-Version ein Handbuch.
Die Frage ist also, wie Excel UTF8-Daten mit einem einfachen Doppelklick anzeigen kann.
Zumindest in Excel 2007 ist dies nicht möglich, wenn Sie CSV-Dateien verwenden, da die UTF8-Stückliste ignoriert wird und nur Müll angezeigt wird. Dies ist bereits Teil der Frage von Lyubomyr Shaydariv:
Ich mache die gleiche Erfahrung: Das Schreiben russischer oder griechischer Daten in eine UTF8-CSV-Datei mit Stückliste führt zu Müll in Excel:
Inhalt der UTF8-CSV-Datei:
Ergebnis in Excel 2007:
Eine Lösung besteht darin, CSV überhaupt nicht zu verwenden. Dieses Format wird so dümmlich von Microsoft implementiert , dass er auf dem Bereich Einstellungen in hängt Bedienfeld , wenn Komma oder Semikolon als Trennzeichen verwendet wird. Daher wird dieselbe CSV-Datei möglicherweise auf einem Computer korrekt geöffnet, auf einem anderen Computer jedoch nicht. "CSV" bedeutet " Kommagetrennte Werte", aber beispielsweise muss unter deutschen Windows standardmäßig ein Semikolon als Trennzeichen verwendet werden, während Komma nicht funktioniert. (Hier sollte es SSV = Semicolon Separated Values heißen.) CSV-Dateien können nicht zwischen verschiedenen Sprachversionen von Windows ausgetauscht werden. Dies ist ein zusätzliches Problem zum UTF-8-Problem.
Excel existiert seit Jahrzehnten. Es ist eine Schande, dass Microsoft in all den Jahren nicht in der Lage war, so grundlegende Dinge wie den CSV-Import zu implementieren.
Wenn Sie jedoch dieselben Werte in eine HTML-Datei einfügen und diese Datei als UTF8-Datei mit Stückliste mit der Dateierweiterung XLS speichern, erhalten Sie das richtige Ergebnis.
Inhalt der UTF8 XLS-Datei:
Ergebnis in Excel 2007:
Sie können sogar Farben in HTML verwenden, die in Excel korrekt angezeigt werden.
Ergebnis in Excel 2007:
In diesem Fall hat nur die Tabelle selbst einen schwarzen Rand und Linien. Wenn ALLE Zellen Gitterlinien anzeigen sollen, ist dies auch in HTML möglich:
Mit diesem Code können Sie sogar den Namen des Arbeitsblatts angeben (hier "MySuperSheet").
Ergebnis in Excel 2007:
quelle
Wir haben diese Problemumgehung verwendet:
quelle
Hatte die gleichen Probleme mit PHP-generierten CSV-Dateien. Excel ignorierte die Stückliste, als das Trennzeichen über
"sep=,\n"
am Anfang des Inhalts definiert wurde (aber natürlich nach der Stückliste).Das Hinzufügen einer Stückliste (
"\xEF\xBB\xBF"
) am Anfang des Inhalts und das Festlegen des Semikolons als Trennzeichen überfputcsv($fh, $data_array, ";");
ist der Trick.quelle
Ich hatte in der Vergangenheit das gleiche Problem (wie man Dateien erstellt, die Excel lesen kann, und andere Tools können auch lesen). Ich habe TSV anstelle von CSV verwendet, aber das gleiche Problem mit Codierungen ist aufgetreten.
Ich habe keine Möglichkeit gefunden, Excel dazu zu bringen, UTF-8 automatisch zu erkennen, und ich war nicht bereit / in der Lage, den Verbrauchern der Dateien komplizierte Anweisungen zum Öffnen zu geben. Also habe ich sie als UTF-16le (mit einer Stückliste) anstelle von UTF-8 codiert. Zweimal so groß, aber Excel kann die Codierung erkennen. Und sie komprimieren gut, so dass die Größe selten (aber leider nicht nie) von Bedeutung ist.
quelle
Alte Frage, aber zum Teufel, die einfachste Lösung ist:
quelle
Wie ich auf http://thinkinginsoftware.blogspot.com/2017/12/correctly-generate-csv-that-excel-can.html gepostet habe :
Bitten Sie den für die Erstellung der CSV zuständigen Softwareentwickler, diese zu korrigieren. Als schnelle Problemumgehung können Sie mit gsed die UTF-8-Stückliste am Anfang der Zeichenfolge einfügen:
Dieser Befehl fügt die UTF-4-Stückliste ein, falls nicht vorhanden. Daher ist es ein idempotenter Befehl. Jetzt sollten Sie in der Lage sein, auf die Datei zu doppelklicken und sie in Excel zu öffnen.
quelle
Sie können die CSV-Datei mit der Stückliste über Notepad ++ in UTF-8 konvertieren:
Encoding
→Convert to UTF-8
.File
→Save
.Arbeitete in Microsoft Excel 2013 (15.0.5093.1000) MSO (15.0.5101.1000) 64-Bit von Microsoft Office Professional Plus 2013 unter Windows 8.1 mit dem Gebietsschema für Nicht-Unicode-Programme auf "Deutsch (Deutschland)".
quelle
Einfaches VBA-Makro zum Öffnen von Utf-8-Text- und CSV-Dateien
Herkunft: = 65001 ist UTF-8. Komma: True für CSV-Dateien, die in Spalten verteilt sind
Speichern Sie es in Personal.xlsb, damit es immer verfügbar ist. Personalisieren Sie die Excel-Symbolleiste, indem Sie eine Makroaufrufschaltfläche hinzufügen und von dort aus Dateien öffnen. Sie können dem Makro weitere Formatierungen hinzufügen, z. B. automatische Anpassung der Spalten, Ausrichtung usw.
quelle
Nur zur Unterstützung von Benutzern, die daran interessiert sind, die Datei in Excel zu öffnen, die diesen Thread wie ich erreichen.
Ich habe den folgenden Assistenten verwendet und es hat für mich gut funktioniert, eine UTF-8-Datei zu importieren. Nicht transparent, aber nützlich, wenn Sie die Datei bereits haben.
Quelle: https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0
quelle
Ja, das ist möglich. Wie bereits von mehreren Benutzern festgestellt, scheint es ein Problem beim Excel-Lesen der richtigen Byte-Ordnungsmarke zu geben, wenn die Datei in UTF-8 codiert ist. Mit UTF-16 scheint es kein Problem zu geben, daher ist es für UTF-8 endemisch. Die Lösung, die ich dafür verwende, ist das Hinzufügen der Stückliste, ZWEIMAL. Dazu führe ich den folgenden sed-Befehl zweimal aus:
, wo der Platzhalter durch einen beliebigen Dateinamen ersetzt werden kann. Dies führt jedoch zu einer Mutation von sep = am Anfang der CSV-Datei. Die CSV-Datei wird dann normal in Excel geöffnet, jedoch mit einer zusätzlichen Zeile mit "sep =" in der ersten Zelle. Das "sep =" kann auch in der Quell-CSV-Datei selbst entfernt werden. Beim Öffnen der Datei mit VBA sollte jedoch das Trennzeichen angegeben werden:
Format 6 ist das CSV-Format. Setzen Sie Local auf true, falls die Datei Datumsangaben enthält. Wenn Local nicht auf true gesetzt ist, werden die Daten amerikanisiert, wodurch in einigen Fällen das CSV-Format beschädigt wird.
quelle
Das ist meine Arbeitslösung:
Der Schlüssel ist Origin: = 65001
quelle
Ja, es ist möglich. Wenn Sie den Stream schreiben, der die CSV erstellt, müssen Sie zunächst Folgendes tun:
quelle
Eine wirklich erstaunliche Liste von Antworten, aber da noch eine ziemlich gute fehlt, werde ich sie hier erwähnen: Öffnen Sie die CSV-Datei mit Google Sheets und speichern Sie sie als Excel-Datei auf Ihrem lokalen Computer.
Im Gegensatz zu Microsoft hat Google es geschafft, UTF-8-CSV-Dateien zu unterstützen, sodass es nur funktioniert, um die Datei dort zu öffnen. Und der Export ins Excel-Format funktioniert auch einfach. Auch wenn dies möglicherweise nicht die bevorzugte Lösung für alle ist, ist es ziemlich ausfallsicher und die Anzahl der Klicks ist nicht so hoch, wie es sich anhört, insbesondere wenn Sie ohnehin bereits bei Google angemeldet sind.
quelle
Dies ist keine genaue Antwort auf die Frage, aber da ich darauf gestoßen bin und die oben genannten Lösungen für mich nicht funktionierten oder Anforderungen hatten, die ich nicht erfüllen konnte, gibt es eine andere Möglichkeit, die Stückliste hinzuzufügen, wenn Sie Zugriff auf vim haben:
quelle
Hallo, ich benutze Ruby on Rails für die CSV-Generation. In unserer Anwendung planen wir die Verwendung der Mehrsprachigkeit (I18n). Beim Anzeigen von I18n-Inhalten in der CSV-Datei von Windows Excel traten Probleme auf.
War gut mit Linux (Ubuntu) und Mac.
Wir haben festgestellt, dass Windows Excel die Daten erneut importieren muss, um die tatsächlichen Daten anzuzeigen. Während des Imports erhalten wir mehr Optionen zur Auswahl des Zeichensatzes.
Dies kann jedoch nicht für jeden Benutzer erklärt werden. Daher suchen wir nach einer Lösung, die nur durch Doppelklick geöffnet werden kann.
Dann haben wir die Art und Weise identifiziert, wie Daten im offenen Modus angezeigt und in Windows mit Hilfe von Aghuddleston Gist Excel ausgeführt werden . Bei Referenz hinzugefügt.
Beispiel I18n Inhalt
In Mac und Linux
Schwedisch: Förnamn Englisch: Vorname
In Windows
Schwedisch: Förnamn Englisch: Vorname
Wichtige Dinge, die hier zu beachten sind, sind der offene Modus und bom
open_mode = "w +: UTF-16LE: UTF-8"
bom = "\ xEF \ xBB \ xBF"
Vor dem Schreiben der CSV-Stückliste einfügen
f.write bom
f.write (csv_file)
Windows und Mac
Die Datei kann direkt durch Doppelklick geöffnet werden.
Linux (Ubuntu)
Fragen Sie beim Öffnen einer Datei nach den Trennzeichenoptionen -> wählen Sie "TAB".
quelle
Ich hatte vor einigen Tagen das gleiche Problem und konnte keine Lösung finden, da ich die Funktion nicht verwenden kann,
import from csv
da dadurch alles als Zeichenfolge gestaltet wird.Meine Lösung bestand darin, die Datei zuerst mit notpad ++ und zu öffnen
change the encode to ASCII
. Dann einfach die Datei in Excel geöffnet und es hat wie erwartet funktioniert.quelle
In PHP stellen Sie Ihrem $ csv_string einfach $ bom voran:
Getestet mit MS Excel 2016, PHP 7.2.4
quelle
Dies ist eine alte Frage, aber ich bin gerade auf ein ähnliches Problem gestoßen, und die Lösung kann anderen helfen:
Hatte das gleiche Problem beim Schreiben von CSV-Textdaten in eine Datei. Beim Öffnen der resultierenden CSV-Datei in Excel wird der gesamte Text in eine einzelne Spalte verschoben. Nachdem ich die obigen Antworten gelesen hatte, versuchte ich Folgendes, was das Problem zu lösen scheint.
Wenden Sie beim Erstellen Ihres StreamWriter eine UTF-8-Codierung an. Das ist es.
Beispiel:
quelle
Close()
imDispose
Stapel gesehen zu haben, aber los geht's. Sie sind auch falsch in Ihrer Aussage, dass der CSV-Import primitiv ist, da er nicht den von Ihnen vorgeschlagenen ineffizienten HTML-Ansatz benötigt. Tatsächlich scheint es nicht intuitiv zu sein , zusätzliche programmatische Schritte zu erstellen, um Klartextdaten zu erfassen, in HTML umzuwandeln und dann in Excel zu ziehenWenn Sie es vollautomatisch, mit einem Klick oder automatisch von einer Webseite in Excel laden möchten, aber keine richtigen Excel-Dateien generieren können, würde ich empfehlen, alternativ das SYLK-Format zu verwenden. OK, es ist nicht so einfach wie CSV, aber es basiert auf Text und ist sehr einfach zu implementieren. Es unterstützt UTF-8 ohne Probleme.
Ich habe eine PHP-Klasse geschrieben, die die Daten empfängt und eine SYLK-Datei ausgibt, die direkt in Excel durch einfaches Klicken auf die Datei geöffnet wird (oder Excel automatisch startet, wenn Sie die Datei auf eine Webseite mit dem richtigen MIME-Typ schreiben. Sie können sogar Fügen Sie Formatierungen hinzu (z. B. Fettdruck, Formatieren von Zahlen auf bestimmte Weise usw.) und ändern Sie die Spaltengröße oder Spalten mit automatischer Größe zum Text in den Spalten. Insgesamt besteht der Code wahrscheinlich nicht aus mehr als 100 Zeilen.
Es ist kinderleicht, SYLK zurückzuentwickeln, indem Sie eine einfache Tabelle erstellen, als SYLK speichern und dann mit einem Texteditor lesen. Der erste Block sind Überschriften und Standardnummernformate, die Sie erkennen (die Sie in jeder von Ihnen erstellten Datei wieder auffliegen lassen). Die Daten sind dann einfach eine X / Y-Koordinate und ein Wert.
quelle
quelle
Ich generiere 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 wurde, wie folgt:
Ich hatte ursprünglich den folgenden Code, mit dem Akzente in Notepad ++ gut aussehen, aber in Excel verstümmelt wurden:
Ihr Kilometerstand kann variieren - ich verwende .NET 4 und Excel von Office 365.
quelle
Arbeitslösung für Office 365
UTF-16
(kein LE, BE)\t
Code in PHP
quelle
Speichern Sie zuerst die Excel-Tabelle als Unicode-Text. Öffnen Sie die TXT-Datei mit dem Internet Explorer und klicken Sie auf "Speichern unter". TXT-Codierung - Wählen Sie die entsprechende Codierung aus, z. B. für Win Cyrillic 1251
quelle
Ich habe alles versucht, was ich in diesem Thread finden konnte und ähnlich, nichts hat vollständig funktioniert. Das Importieren in Google Sheets und das einfache Herunterladen als CSV funktionierte jedoch wie ein Zauber. Probieren Sie es aus, wenn Sie zu meinem Frustpunkt kommen.
quelle