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


453

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.


1
Können Sie tabulatorgetrennte Dateien verwenden? Wenn ja, haben Sie vielleicht mehr Glück.
Tim Perry

8
Office 2010+: Beste Arbeit: UTF-16LE mit Stückliste und \tals Trennzeichen. Funktioniert in englischer und nicht englischer Excel-Einstellung. Kann drücken, Ctrl-Sohne das Dateiformat usw. auszuwählen. Unicode-Zeichen bleiben erhalten.
Sebastian

@ Duncan ehrlich gesagt, ich bin verwirrt und es ist schwer zu "beurteilen". Ich habe Alex 'Antwort vor mehr als 2 Jahren akzeptiert (Fragen und Antworten beide am 14. Mai), und dann antwortete Mark und schlug eine knifflige Problemumgehung vor (ich habe sie tatsächlich nicht überprüft), die überraschenderweise mehr Punkte bei meiner Frage erzielte, die überraschenderweise wurde beliebt auch. Wir haben die Unterstützung von Excel in meinem Projekt vor langer Zeit abgelehnt, und ich möchte Alex 'Reputationsbewertung nicht wegnehmen, da Excel CSV anscheinend falsch behandelt hat und wahrscheinlich immer noch scheint (bitte korrigieren Sie mich, wenn ich falsch liege). Es ist schwer zu sagen, sorry.
Lyubomyr Shaydariv

2
Alex 'Antwort wurde von einem Moderator gelöscht. Es wurde keine Erklärung gegeben, aber wenn Sie genug Ruf haben, können Sie es immer noch sehen.
Mark Ransom

1
Da Zeitmaschinen noch nicht gut existieren, muss man einfach nicht zustimmen.
Osexpert

Antworten:


398

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:

  1. Speichern Sie die exportierte Datei als CSV
  2. Öffnen Sie Excel
  3. Importieren Sie die Daten mit Daten -> Externe Daten importieren -> Daten importieren
  4. Wählen Sie den Dateityp "csv" und navigieren Sie zu Ihrer Datei
  5. Ändern Sie im Import-Assistenten das File_Origin in "65001 UTF" (oder wählen Sie die richtige Sprachzeichen-ID).
  6. Ändern Sie das Trennzeichen in Komma
  7. Wählen Sie aus, wohin importiert werden soll, und Fertig stellen

Auf diese Weise sollten die Sonderzeichen korrekt angezeigt werden.


163

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.


18
Das Einfügen einer UTF-8-Stückliste scheint der richtige Weg zu sein. Danach ist es transparent.
vy32

12
Ich benutze Notepad ++ auf einfache Weise die CSV konvertieren von UTF-8zuUTF-8 with BOM
Sébastien

3
Ja - beste Lösung. Viele verwirrende Beiträge zum Setzen von Headern in http-Antworten. Dies löst das Problem. Gleiches gilt für das Öffnen der Datei im Editor und das Speichern mit der UTF-8-Option. Fügt auch den Marker für die Bytereihenfolge hinzu.
user369142

1
@Elmue: Ich dachte, vielleicht (wie ich) dachte er, er würde es mit einem Byte-Order-Marker speichern, aber nicht, weil eine Bibliothek nicht so funktionierte, wie er dachte. Ich fand es lohnenswert, diese Antwort hinzuzufügen, und offensichtlich fanden es auch einige andere Leute nützlich. Auf jeden Fall scheint es eine bessere Antwort zu sein, als zu sagen, dass CSV nicht verwendet werden soll, oder Benutzer anzuweisen, wie die Datei auf bizarre Weise geöffnet werden soll.
StriplingWarrior

1
Die Mac-Version von Excel scheint die Stückliste immer noch zu ignorieren. (Excel für Mac 2011.)
Thomas Andrews

74

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 \uFEFFhat geholfen.


8
Da ich am Anfang meiner CSV-Datei (in Java generiert) \ uFEFF hinzugefügt habe, kann Excel sie korrekt öffnen! Thx
Galdo

16
das hat auch mein problem gelöst, in php sieht es so aus : $utf8_with_bom = chr(239) . chr(187) . chr(191) . $csvText;
Abdullah

@updola vielen Dank für diesen Kommentar, sparte mir Stunden
Nathan Hayfield

UTF-8 verwendet per Definition keine Stücklistenzeichen und sollte diese auch nicht verwenden. Die Art und Weise, wie Excel Stücklisten liest, verstärkt den Vorteil von UTF-8 gegenüber Unicode, das Abwärtskompatibilität mit ASCII bietet. Durch Hinzufügen der Stückliste funktioniert Excel, es werden jedoch andere ordnungsgemäße Lesevorgänge für UTF-8 / ASCII-Dateien unterbrochen.
Nelson

1
\ FE \ FF macht Mac OS Excel 2016 zur gesamten Datei als japanische Hieroglyphen.
Nakilon

55

Es ist unglaublich, dass es so viele Antworten gibt, aber keine beantwortet die Frage:

"Als ich diese Frage stellte, fragte ich nach einer Möglichkeit, eine UTF-8-CSV-Datei in Excel ohne Probleme für einen Benutzer zu öffnen, ..."

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 habe auch versucht, UTF-8-Stückliste EF BB BF anzugeben, aber Excel ignoriert dies."

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:

Colum1;Column2
Val1;Val2
Авиабилет;Tλληνικ

Ergebnis in Excel 2007:

CSV UTF8 Excel

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:

<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>

Ergebnis in Excel 2007:

UTF8 HTML Excel

Sie können sogar Farben in HTML verwenden, die in Excel korrekt angezeigt werden.

<style>
.Head { background-color:gray; color:white; }
.Red  { color:red; }
</style>
<table border=1>
<tr><td class=Head>Colum1</td><td class=Head>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td class=Red>Авиабилет</td><td class=Red>Tλληνικ</td></tr>
</table>

Ergebnis in Excel 2007:

UTF8 HTML Excel

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:

<html xmlns:x="urn:schemas-microsoft-com:office:excel">
    <head>
        <meta http-equiv="content-type" content="text/plain; charset=UTF-8"/>
        <xml>
            <x:ExcelWorkbook>
                <x:ExcelWorksheets>
                    <x:ExcelWorksheet>
                        <x:Name>MySuperSheet</x:Name>
                        <x:WorksheetOptions>
                            <x:DisplayGridlines/>
                        </x:WorksheetOptions>
                    </x:ExcelWorksheet>
                </x:ExcelWorksheets>
            </x:ExcelWorkbook>
        </xml>
    </head>
    <body>
        <table>
            <tr><td>Colum1</td><td>Column2</td></tr>
            <tr><td>Val1</td><td>Val2</td></tr>
            <tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
        </table>
    </body>
</html>

Mit diesem Code können Sie sogar den Namen des Arbeitsblatts angeben (hier "MySuperSheet").

Ergebnis in Excel 2007:

Geben Sie hier die Bildbeschreibung ein


1
Und es ist auch unglaublich, dass die Leute immer noch darauf antworten. :) Ich würde jedoch argumentieren, dass CSV tot ist: CSV ist ein tödlich einfaches einfaches Streaming-Format, und als ich an diesem Projekt beteiligt war, haben wir es auch sehr stark für die Interaktion von Komponenten verwendet. Ich würde niemals das HTML-Format verwenden, da es zu repräsentativ ist, und ich konnte die Benutzer dieses Projekts niemals dazu bringen, Daten in HTML zu exportieren, nur um es Excel-freundlich zu machen. Excel hat an UTF-8 CSV gesaugt, und ich habe keine Ahnung, was sich seit 5 Jahren geändert hat. Aber diese durch Kommas, Semikolons und Tabulatoren getrennten Dateien sind wahrer Wahnsinn, denke ich.
Lyubomyr Shaydariv

5
Es ist nicht unglaublich, dass die Leute Ihre Frage immer noch beantworten, weil Google sie hierher bringt: Alle mit der gleichen Frage: Wie kann ich dummes Excel dazu bringen, das zu tun, was ich will? Geben Sie 3 Wörter in Google ein: "excel csv utf8" und Ihre Frage ist das ERSTE Ergebnis weltweit. Du hast einen Bestseller geschrieben!
Elmue

8
Da Sie sich die Zeit genommen haben, um darauf hinzuweisen, dass keine der anderen Antworten hier dazu führt, dass Excel eine CSV-Datei korrekt öffnet, ist es erwähnenswert, dass diese Antwort dies auch nicht tut. In der ursprünglich akzeptierten Antwort (die von einem Moderator gelöscht wurde) wurde empfohlen, die Daten direkt in eine Excel-Datei zu exportieren oder eine HTML-Datei zu exportieren und Benutzern das Öffnen der Datei in Excel zu ermöglichen. Jede dieser Lösungen ist weniger hackig als das Speichern einer HTML-Datei mit einer XLS-Dateierweiterung, es wurde jedoch keine Antwort vorgeschlagen, die die Frage tatsächlich beantwortet.
StriplingWarrior

3
@Warrior: "..aber es wurde keine Antwort vorgeschlagen, die die Frage tatsächlich beantwortet." Das ist nicht richtig. Ich habe diese Frage beantwortet: Zumindest mit Excel 2007 ist es NICHT MÖGLICH. Dies ist die eindeutige Antwort. Wenn Excel die UTF8-Stückliste ignoriert und Daten als ANSI interpretiert, gibt es keine Möglichkeit, beispielsweise griechischen oder russischen Text über CSV durch einfachen Doppelklick auf die Datei in Excel zu importieren (was die Frage war: "Ohne Probleme für einen Benutzer"). ). Was ich vorschlage, ist eine funktionierende Lösung, die mit ALLEN Excel-Versionen mit einem Doppelklick funktioniert und keine zusätzlichen Schritte in den Menüs von Excel erfordert.
Elmue

2
Dies beantwortet nicht nur nicht die Frage, es ist auch völlig falsch zu behaupten, CSV sei "Vermächtnis" und "tot". Nur weil Sie die Verwendung dafür nicht sehen, heißt das nicht, dass es tot ist. Außerdem verstehen Sie eindeutig nicht, dass es Geschichte ist oder wie weit verbreitet es heute ist. Dies ist besser als XML (aufgrund kleinerer Paketgrößen) und das Problem hierbei ist, dass Microsoft einfach keinem Standard für das UTF8-Format folgt. Die richtige Antwort wäre, Open Office und nicht Microsoft zu verwenden, da Microsoft noch nie gut codiert hat.
Jeremy

49

Wir haben diese Problemumgehung verwendet:

  1. Konvertieren Sie CSV in UTF-16 LE
  2. Stückliste am Dateianfang einfügen
  3. Verwenden Sie die Registerkarte als Feldtrennzeichen

1
Vielen Dank! Ich habe alle anderen Antworten in diesem Thread ausprobiert, aber die Konvertierung in UTF-8 hat einfach nicht funktioniert. Als ich UTF-16 mit Stückliste ausprobierte, funktionierte es sofort.
Husky

Für Excel für Mac 2011 war ich erfolgreich mit UTF-16 Little Endian CSV-Dateien
multidynamisch

Dank dieser Lösung können meine Benutzer eine Unicode-CSV-Datei erstellen, die sie in Excel öffnen können.
user1073075

21

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 über fputcsv($fh, $data_array, ";");ist der Trick.


13

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.


Es ist eine alte Frage, aber ich bin froh, dass die Leute sie immer noch beantworten. Vielen Dank. :)
Lyubomyr Shaydariv

1
@ LyubomyrShaydariv: Seit ich diese Frage beantwortet habe, sagte mir ein Kollege, dass das neueste Excel UTF-8-CSV-Dateien identifiziert, vorausgesetzt, sie haben eine anfängliche Stückliste. In ein paar Jahren, wenn jeder auf der Welt (oder zumindest jeder, an den wir die Dateien liefern) auf dieser Version von Excel oder besser ist, kann ich möglicherweise meine Codierung ändern :-)
Steve Jessop

Seltsam, für mich funktioniert es nicht. Verwandelt die Zeichen in chinesische Symbole ... (sie sollen hebräisch sein)
Veverke

Ich hatte chinesische Zeichen in Excel, als ich in "UTF-16 BE mit Stückliste" speicherte. Als ich "UTF-16 LE mit Stückliste" ausprobierte, funktionierte es! Ich habe Sublime Text zum Testen verwendet.
Henno

12

Alte Frage, aber zum Teufel, die einfachste Lösung ist:

  1. Öffnen Sie CSV im Editor
  2. Speichern unter -> wählen Sie die richtige Codierung
  3. Öffnen Sie die neue Datei

1
Welche Excel-Version verwenden Sie?
Lyubomyr Shaydariv

1
Genial, funktioniert einfach und löst das Problem (zumindest für mich)
Auberon Vacher

1
Nein, da das Problem darin besteht, dass Excel die CSV-Datei als CSV-Datei öffnet. Ich meine, ich habe einen Prozess, in dem ich CSV-Dateien generiere. Der Benutzer müsste dann nur die Dateien öffnen. Hier muss er / sie mehr als das tun.
Veverke

2
@Veverke Wenn Sie regelmäßig Dateien generieren, ist dies nicht die beste Lösung. Aber wenn es einmalig ist, ist diese Antwort perfekt. Dies funktioniert, weil Notepad die Stückliste am Anfang einer UTF-8- oder UTF-16-Datei platziert.
Mark Ransom

Klappt wunderbar. ((:
user2925795

10

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:

gsed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' file.csv

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.


Danke, das hat es behoben. Ich habe gerade die CSV konvertiert ';' In Notepad ++ in UTF-BOM getrennt und weiß, dass Excel es korrekt öffnet.
RandomGuy

Genau das, was gebraucht wurde! Hier ist ein Hinweis darauf
EFC

Dies ist die Problemumgehung für Excel, bei der utf-Zeichen in CSV-Dateien nicht erkannt werden konnten. Also diese Korrektur, um das Excel-Problem zu beheben.
Cobp

Dies funktionierte für die griechische Version Excel 2007 mit Kommaseparatoren. Vielen Dank.
NameOfTheRose

Die Codierung wurde in fs.createWriteStream (Dateiname, {Codierung: 'UTF-16le'}) in 'UTF-16le' geändert und Excel hat die CSV-Datei korrekt
geöffnet

9

Sie können die CSV-Datei mit der Stückliste über Notepad ++ in UTF-8 konvertieren:

  1. Öffnen Sie die Datei in Notepad ++ .
  2. Gehen Sie zum Menü EncodingConvert to UTF-8.
  3. Gehen Sie zum Menü FileSave.
  4. Schließen Sie Notepad ++.
  5. Öffnen Sie die Datei in Excel.

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)".


1
Hat getan, was du gesagt hast, hat überhaupt nicht funktioniert. Konvertieren / Codieren, Setzen von Zeichensätzen, in meinem Fall hat nichts funktioniert. Datei in Google Sheets importieren, als CSV herunterladen, einwandfrei funktioniert. Ihr Willkommen von 2045
pakalbekim

1
Ich musste es mit Encoding -> Cinvert ti UTF-8-BOM Excel Version 2016
Igor Vuković

4

Einfaches VBA-Makro zum Öffnen von Utf-8-Text- und CSV-Dateien

Sub OpenTextFile()

   filetoopen = Application.GetOpenFilename("Text Files (*.txt;*.csv), *.txt;*.csv")
   If filetoopen = Null Or filetoopen = Empty Then Exit Sub

   Workbooks.OpenText Filename:=filetoopen, _
   Origin:=65001, DataType:=xlDelimited, Comma:=True

End Sub

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.


2
Vielen Dank. Leider ist dies der Vorschlag für wirklich fortgeschrittene Excel-Benutzer. Mit dieser Frage möchte ich Excel dazu bringen, dies automatisch selbst zu tun.
Lyubomyr Shaydariv

Ich habe versucht, dieses Code-Snippet zu verwenden, aber es funktioniert bei mir nicht. Ich benutze Excel 2013.
Sharunas Bielskis

3

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.

  1. Öffnen Sie Microsoft Excel 2007.
  2. Klicken Sie auf die Menüoption Daten.
  3. Klicken Sie auf das Symbol Von Text.
  4. Navigieren Sie zum Speicherort der Datei, die Sie importieren möchten. Klicken Sie auf den Dateinamen und dann auf die Schaltfläche Importieren. Das Fenster Textimport-Assistent - Schritt 1 oder 3 wird nun auf dem Bildschirm angezeigt.
  5. Wählen Sie den Dateityp, der Ihre Daten am besten beschreibt - Begrenzte oder feste Breite.
  6. Wählen Sie 65001: Unicode (UTF-8) aus der Dropdown-Liste, die neben Dateiursprung angezeigt wird.
  7. Klicken Sie auf die Schaltfläche Weiter, um das Fenster Textimport-Assistent - Schritt 2 oder 3 anzuzeigen.
  8. Setzen Sie ein Häkchen neben das Trennzeichen, das in der Datei verwendet wurde, die Sie in Microsoft Excel 2007 importieren möchten. Das Fenster Datenvorschau zeigt Ihnen, wie Ihre Daten basierend auf dem von Ihnen ausgewählten Trennzeichen angezeigt werden.
  9. Klicken Sie auf die Schaltfläche Weiter, um den Textimport-Assistenten anzuzeigen - Schritt 3 von 3.
  10. Wählen Sie das entsprechende Datenformat für jede Datenspalte, die Sie importieren möchten. Sie haben auch die Möglichkeit, eine oder mehrere Datenspalten nicht zu importieren, wenn Sie möchten.
  11. Klicken Sie auf die Schaltfläche Fertig stellen, um den Import Ihrer Daten in Microsoft Excel 2007 abzuschließen.

Quelle: https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0


3

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:

sed -I '1s/^/\xef\xbb\xbf/' *.csv

, 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:

Workbooks.Open(name, Format:=6, Delimiter:=";", Local:=True)

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.


1
Wenn ich den Befehl sed ausführe, erhalte ich: "sed: ungültige Option - 'I'", ich denke, es sollte 'i' sein
BiAiB

2

Das ist meine Arbeitslösung:

vbFILEOPEN = "your_utf8_file.csv"
Workbooks.OpenText Filename:=vbFILEOPEN, DataType:=xlDelimited, Semicolon:=True, Local:=True, Origin:=65001

Der Schlüssel ist Origin: = 65001


2

Ja, es ist möglich. Wenn Sie den Stream schreiben, der die CSV erstellt, müssen Sie zunächst Folgendes tun:

myStream.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length)

Sie haben die Frage nicht gelesen! Lyubomyr Shaydariv schrieb: "Ich habe auch versucht, UTF-8 BOM EF BB BF anzugeben, aber Excel ignoriert das."
Elmue

Dies ist Arbeitscode. Wenn Sie mit diesem Lead UTF-8-Dateien aus .NET-Anwendungen schreiben, erkennt Excel die Datei als UTF8.
Zax

Möglicherweise funktioniert es in IHREM Excel. Zumindest in Excel 2007 wird die Stückliste jedoch vollständig ignoriert. Wenn Sie also beabsichtigen, einen Code zu schreiben, der auf allen Excel-Versionen funktioniert, ist Ihr Code nicht nützlich.
Elmue

2

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.


2

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:

vim -e -s +"set bomb|set encoding=utf-8|wq" filename.csv

2

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

def user_information_report(report_file_path, user_id)
    user = User.find(user_id)
    I18n.locale = user.current_lang
    open_mode = "w+:UTF-16LE:UTF-8"
    bom = "\xEF\xBB\xBF"
    body user, open_mode, bom
  end

def headers
    headers = [
        "ID", "SDN ID",
        I18n.t('sys_first_name'), I18n.t('sys_last_name'), I18n.t('sys_dob'),
        I18n.t('sys_gender'), I18n.t('sys_email'), I18n.t('sys_address'),
        I18n.t('sys_city'), I18n.t('sys_state'), I18n.t('sys_zip'),
        I18n.t('sys_phone_number')
    ]
  end

def body tenant, open_mode, bom
    File.open(report_file_path, open_mode) do |f|
      csv_file = CSV.generate(col_sep: "\t") do |csv|
        csv << headers
        tenant.patients.find_each(batch_size: 10) do |patient|
          csv <<  [
              patient.id, patient.patientid,
              patient.first_name, patient.last_name, "#{patient.dob}",
              "#{translate_gender(patient.gender)}", patient.email, "#{patient.address_1.to_s} #{patient.address_2.to_s}",
              "#{patient.city}", "#{patient.state}",  "#{patient.zip}",
              "#{patient.phone_number}"
          ]
        end
      end
      f.write bom
      f.write(csv_file)
    end
  end

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". Geben Sie hier die Bildbeschreibung ein


1

Ich hatte vor einigen Tagen das gleiche Problem und konnte keine Lösung finden, da ich die Funktion nicht verwenden kann, import from csvda 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.


1

In PHP stellen Sie Ihrem $ csv_string einfach $ bom voran:

$bom = sprintf( "%c%c%c", 239, 187, 191); // EF BB BF
file_put_contents( $file_name, $bom . $csv_string );

Getestet mit MS Excel 2016, PHP 7.2.4


0

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:

using (StreamWriter output = new StreamWriter(outputFileName, false, Encoding.UTF8, 2 << 22)) {
   /* ... do stuff .... */
   output.Close();
}

@elmue Lust, ein wenig auszuarbeiten? Sicherlich stellt die Ausgabe von CSV mit der richtigen Codierung sicher, dass später im Workflow keine Kompatibilitätsprobleme mit Excel auftreten.
Rex

Der Code ist falsch, da Sie keine Ausgabe benötigen. Close (), wenn Sie eine using () -Anweisung haben. Abgesehen davon ist Excel CSV Inport sehr primitiv. Ich würde es überhaupt nicht benutzen. Wenn Sie in Excel importieren möchten, verwenden Sie stattdessen eine HTML-Tabelle und öffnen Sie sie in Excel.
Elmue

Vielen Dank für die Klarstellung von @Elmue. Leider bin ich auf eine Reihe von Szenarien gestoßen (einschließlich Dateien über Netzwerklaufwerke hinweg), in denen ein Abschluss explizit sowie die Entsorgung erforderlich sind . Ich habe keinen Grund gefunden, warum ich mich erinnere, einen Anruf Close()im DisposeStapel 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 ziehen
Rex

Fortsetzung ... Unterschiedliche Szenarien haben jedoch unterschiedliche Anforderungen und mein Beispiel zeigt korrekt, wie die Codierung als angefordertes OP angegeben wird
Rex

Bitte lesen Sie die ursprüngliche Frage noch einmal: "Ich habe auch versucht, UTF-8-Stückliste EF BB BF anzugeben, aber Excel ignoriert dies." Ich habe das gleiche getestet und komme zum gleichen Ergebnis: Excel erkennt die UTf8-Stückliste NICHT. Versuch es! Schreiben Sie eine CSV-Datei und fügen Sie griechische oder russische Zeichen ein. Öffnen Sie das dann in Excel und Sie erhalten Garbarge. Ihre Antwort löst also nichts.
Elmue

0

Wenn 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.


0
  1. Laden Sie LibreOffice Calc herunter und installieren Sie es
  2. Öffnen Sie die CSV-Datei Ihrer Wahl in LibreOffice Calc
  3. Dem Himmel sei Dank, dass ein Assistent zum Importieren von Text angezeigt wird ...
  4. ... wählen Sie Ihre Trennzeichen und Zeichencodierungsoptionen
  5. Wählen Sie die resultierenden Daten in Calc aus und kopieren Sie sie in Excel

0

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:

// Use UTF8 encoding so that Excel is ok with accents and such.
using (StreamWriter writer = new StreamWriter(path, false, Encoding.UTF8))
{
    SaveCSV(writer);
}

Ich hatte ursprünglich den folgenden Code, mit dem Akzente in Notepad ++ gut aussehen, aber in Excel verstümmelt wurden:

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

Ihr Kilometerstand kann variieren - ich verwende .NET 4 und Excel von Office 365.


0

Arbeitslösung für Office 365

  • Speichern in UTF-16(kein LE, BE)
  • Trennzeichen verwenden \t

Code in PHP

$header = ['číslo', 'vytvořeno', 'ěščřžýáíé'];
$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);

-1

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


-1

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.