Ich habe diese sehr einfache Sache, die nur einige Sachen im CSV-Format ausgibt, aber es muss UTF-8 sein. Ich öffne diese Datei in TextEdit oder TextMate oder Dreamweaver und sie zeigt UTF-8-Zeichen richtig an, aber wenn ich sie in Excel öffne, macht sie stattdessen diese dumme Sache. Folgendes habe ich am Anfang meines Dokuments:
header("content-type:application/csv;charset=UTF-8");
header("Content-Disposition:attachment;filename=\"CHS.csv\"");
Dies alles scheint den gewünschten Effekt zu haben, außer dass Excel (Mac, 2008) es nicht richtig importieren möchte. In Excel gibt es keine Optionen für mich, um "als UTF-8 zu öffnen" oder so, also ... ich ärgere mich ein wenig.
Ich kann anscheinend nirgendwo klare Lösungen dafür finden, obwohl viele Leute das gleiche Problem haben. Am meisten sehe ich die Stückliste, aber ich kann nicht genau herausfinden, wie das geht. Wie Sie oben sehen echo
können, schreibe ich nur diese Daten, ich schreibe keine Datei. Ich kann das tun, wenn ich muss, ich bin es einfach nicht, weil es an dieser Stelle nicht nötig zu sein scheint. Irgendeine Hilfe?
Update: Ich habe versucht, die Stückliste so wiederzugeben, wie echo pack("CCC", 0xef, 0xbb, 0xbf);
ich sie gerade von einer Site abgerufen habe, die versucht hat, die Stückliste zu erkennen. Aber Excel hängt diese drei Zeichen beim Importieren nur an die allererste Zelle an und bringt die Sonderzeichen immer noch durcheinander.
quelle
Antworten:
Um einen Microsoft-Supporttechniker zu zitieren ,
Update, 2017 : Dies gilt für alle Versionen von Microsoft Excel für Mac vor Office 2016 . Neuere Versionen (von Office 365) unterstützen jetzt UTF-8.
Um UTF-8-Inhalte auszugeben, die Excel sowohl unter Windows als auch unter OS X erfolgreich lesen kann, müssen Sie zwei Dinge tun:
Stellen Sie sicher, dass Sie Ihren UTF-8-CSV-Text in UTF-16LE konvertieren
Stellen Sie sicher, dass Sie am Anfang der Datei die UTF-16LE-Bytereihenfolge hinzufügen
Das nächste Problem, das nur unter Excel unter OS X (aber nicht unter Windows) auftritt, ist das Anzeigen einer CSV-Datei mit durch Kommas getrennten Werten. Excel rendert nur Zeilen mit einer Zeile und den gesamten Text zusammen mit den Kommas in der ersten Zeile.
Um dies zu vermeiden, verwenden Sie Registerkarten als getrennten Wert.
Ich habe diese Funktion aus den PHP-Kommentaren verwendet (mit Tabulatoren "\ t" anstelle von Kommas) und sie funktionierte perfekt unter OS X und Windows Excel.
Beachten Sie, dass ich zum Beheben eines Problems mit einer leeren Spalte als Zeilenende die Codezeile ändern musste, in der Folgendes steht:
zu
Wie einige der anderen Kommentare auf dieser Seite besagen, haben andere Tabellenkalkulations-Apps wie OpenOffice Calc, Apples eigene Zahlen und Google Docs Tabellenkalkulation keine Probleme mit UTF-8-Dateien mit Kommas.
In der Tabelle in dieser Frage erfahren Sie, was für Unicode-CSV-Dateien in Excel funktioniert und was nicht
Als Randnotiz möchte ich hinzufügen, dass Sie, wenn Sie Composer verwenden , einen Blick auf das Hinzufügen
League\Csv
zu Ihren Anforderungen werfen sollten .League\Csv
hat eine wirklich schöne API zum Erstellen von CSV-Dateien .Zur Verwendung
League\Csv
mit dieser Methode CSV - Dateien zu erstellen, überprüfen Sie dieses Beispielquelle
sep=;
odersep=,
zur CSV-Datei Excel mitteilt, wie die CSV getrennt ist und die Spalten wieder korrekt erstellt werden."sep=,\n"
anderen Zeile die Daten hinzufügte und in einer anderen Zeile die Daten hinzufügte. Die Dinge waren in Ordnung, wenn ich alles in einer Zeile erledigte ($csv = chr(255) . chr(254) /* BOM */ . "sep=,\n" . mb_convert_encoding($csv, 'UTF-16LE', 'UTF-8');
). Auf dem Mac sieht jetzt alles gut aus. Ich habe kein Windows zum Testen.Ich habe das gleiche (oder ein ähnliches) Problem.
In meinem Fall funktioniert es, wenn ich der Ausgabe eine Stückliste hinzufüge:
Ich glaube, das ist ein ziemlich hässlicher Hack, aber er hat bei mir funktioniert, zumindest bei Excel 2007 Windows. Ich bin mir nicht sicher, ob es auf dem Mac funktioniert.
quelle
So habe ich es gemacht (um den Browser zum Herunterladen der CSV-Datei aufzufordern):
Das einzige, was das Problem mit der UTF8-Codierung in der CSV-Vorschau behoben hat, wenn Sie auf dem Mac die Leertaste drücken. Aber nicht in Excel Mac 2008 ... weiß nicht warum
quelle
$outstream = fopen( "php://output", 'w' ); fputs( $outstream, "\xEF\xBB\xBF" ); foreach ( $export as $fields ) { fputcsv( $outstream, $fields ); } fclose( $outstream );
))
.Ich habe mich gerade mit dem gleichen Problem befasst und zwei Lösungen gefunden.
Verwenden Sie die von bpeterson76 vorgeschlagene PHPExcel- Klasse .
Hier ist eine PHP-Methode, die einige TSV-Daten aufnimmt und eine Excel-Datei an den Browser ausgibt. Beachten Sie, dass der Excel5 Writer verwendet wird. Dies bedeutet, dass die Datei mit älteren Excel-Versionen kompatibel sein sollte, ich jedoch keinen Zugriff mehr auf diese habe. also kann ich sie nicht testen.
Aufgrund der Effizienzprobleme mit PHPExcel musste ich auch herausfinden, wie eine UTF-8- und Excel-kompatible CSV- oder TSV-Datei generiert werden kann.
Hier ist der PHP-Code, den ich verwendet habe. Beachten Sie, dass ich tsv-Daten verwende (Tabulatoren als Trennzeichen anstelle von Kommas):
quelle
Ich hatte das gleiche Problem und es wurde wie folgt gelöst:
quelle
Excel unterstützt UTF-8 nicht. Sie müssen Ihren UTF-8-Text in UCS-2LE codieren.
quelle
In meinem Fall funktioniert das Folgende sehr gut, um eine CSV-Datei mit UTF-8-Zeichen zu erstellen, die in Excel korrekt angezeigt werden.
Der
0xEF 0xBB 0xBF
Stücklistenkopf teilt Excel die korrekte Codierung mit.quelle
fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF));
<- genau das habe ich gebraucht. Es wirkt wie ein Zauber.Um dies weiterzuverfolgen:
Es scheint, dass das Problem einfach bei Excel auf dem Mac liegt. So generiere ich die Dateien nicht, weil ich sogar CSVs aus Excel generiere sie macht. Ich speichere als CSV und importiere erneut, und alle Charaktere sind durcheinander.
Also ... es scheint keine richtige Antwort darauf zu geben. Vielen Dank für alle Vorschläge.
Ich würde sagen, dass nach allem, was ich gelesen habe, @ Daniel Magliolas Vorschlag zur Stückliste wahrscheinlich die beste Antwort für einen anderen Computer wäre. Aber es löst mein Problem immer noch nicht.
quelle
Dies funktioniert in Excel sowohl für Windows als auch für Mac OS einwandfrei.
Behebung von Problemen in Excel, bei denen keine Zeichen mit diakritischen Zeichen, kyrillischen Buchstaben, griechischen Buchstaben und Währungssymbolen angezeigt werden.
quelle
Die CSV-Datei muss ein Byte Order Mark enthalten.
Oder wie vorgeschlagen und Problemumgehung, geben Sie es einfach mit dem HTTP-Body wieder
quelle
Da die UTF8-Codierung mit Excel nicht gut funktioniert. Sie können die Daten mit in einen anderen Codierungstyp konvertieren
iconv()
.z.B
quelle
Hinzufügen:
Oder:
Vor dem Schreiben von Inhalten in eine CSV-Datei.
Beispiel:
quelle
Das Konvertieren von bereits utf-8-codiertem Text mithilfe von
mb_convert_encoding
ist nicht erforderlich. Fügen Sie einfach drei Zeichen vor dem ursprünglichen Inhalt hinzu:Für mich löste dies das Problem der Sonderzeichen in CSV-Dateien.
quelle
fputs
.Als ich nachforschte und feststellte, dass UTF-8 unter MAC und Windows nicht gut funktioniert, habe ich es mit Windows-1252 versucht. Es unterstützt beide gut, aber Sie müssen den Codierungstyp unter Ubuntu auswählen. Hier ist mein Code
$valueToWrite = mb_convert_encoding($value, 'Windows-1252');
quelle
quelle
Wie wäre es nur mit der Ausgabe für Excel selbst? Dies ist eine hervorragende Klasse , mit der Sie XLS-Dateien serverseitig generieren können. Ich benutze es häufig für Kunden, die CSVs nicht "herausfinden" können und bisher noch nie eine Beschwerde erhalten haben. Es ermöglicht auch einige zusätzliche Formatierungen (Schattierungen, Zeilenhöhen, Berechnungen usw.), die csv niemals ausführen wird.
quelle
Sie können Ihren CSV-String mit iconv konvertieren . beispielsweise:
quelle
Sie müssen die Codierung "Windows-1252" verwenden.
Vielleicht müssen Sie Ihre Zeichenfolgen konvertieren:
quelle
Sie können die 3 Bytes vor dem Export an die Datei anhängen, es funktioniert für mich. Zuvor funktionierte das System nur unter Windows und HP-UX, schlug jedoch unter Linux fehl.
Haben Sie eine UTF-8-Stückliste (3 Bytes, hexadezimal EF BB BF) am Anfang der Datei. Andernfalls interpretiert Excel die Daten gemäß der Standardcodierung Ihres Gebietsschemas (z. B. cp1252) anstelle von utf-8
Generieren einer CSV-Datei für Excel, wie eine neue Zeile in einem Wert eingefügt wird
quelle
Ich bin auf einem Mac, in meinem Fall musste ich nur das Trennzeichen mit angeben
"sep=;\n"
und die Datei in UTF-16LE wie folgt codieren:quelle
Bei mir hat keine der oben genannten Lösungen funktioniert. Folgendes habe ich getan, um das Problem zu beheben: Ändern Sie den Wert mithilfe dieser Funktion im PHP-Code:
Diese Ausgabewerte werden in einem Excel-Blatt korrekt angezeigt.
quelle
Ich hatte das gleiche Problem, als ich eine Excel VBA-Routine hatte, die Daten importierte. Da es sich bei CSV um ein Nur-Text-Format handelt, habe ich dies umgangen, indem ich die Daten programmgesteuert in einem einfachen Datei-Editor wie Wordpad geöffnet und als Unicode-Text erneut gespeichert oder von dort in die Zwischenablage kopiert und in Excel eingefügt habe. Wenn Excel die CSV nicht automatisch in Zellen analysiert, kann dies mithilfe der integrierten Funktion "Text in Spalten" problemlos behoben werden.
quelle
Tritt das Problem immer noch auf, wenn Sie es als TXT-Datei speichern und diese in Excel mit Komma als Trennzeichen öffnen?
Das Problem ist möglicherweise überhaupt nicht die Codierung, sondern möglicherweise nur, dass die Datei nach Excel-Standards keine perfekte CSV ist.
quelle
Dieser Beitrag ist ziemlich alt, aber nach stundenlangem Versuch möchte ich meine Lösung teilen. Vielleicht hilft er jemandem, der mit Excel, Mac und CSV zu tun hat, und stolpert über diese Bedrohung. Ich generiere eine CSV dynamisch als Ausgabe aus einer Datenbank für Excel-Benutzer. (UTF-8 mit Stückliste)
Ich habe viele Iconvs ausprobiert, konnte aber keine deutschen Umlaute in Mac Excel 2004 zum Laufen bringen. Eine Lösung: PHPExcel. Es ist toll, aber für mein Projekt etwas zu viel. Was für mich funktioniert, ist die Erstellung der CSV-Datei und die Konvertierung dieser CSV-Datei in XLS mit diesem PHPsnippet: CSV2XLS . Das Ergebnis xls funktioniert mit deutschen Excel-Umlauten (ä, ö, Ü, ...).
quelle
Ich habe gerade diese Header ausprobiert und Excel 2013 auf einem Windows 7-PC installiert, um die CSV-Datei mit Sonderzeichen korrekt zu importieren. Das Byte Order Mark (BOM) war der letzte Schlüssel, mit dem es funktioniert hat.
quelle
Andernfalls können Sie:
quelle
EINFACHE Lösung für Mac Excel 2008: Ich hatte viele Probleme damit, aber hier war meine einfache Lösung: Öffnen Sie die CSV-Datei in Textwrangler, um Ihre UTF-8-Zeichen korrekt zu öffnen. Ändern Sie nun in der unteren Statusleiste das Dateiformat von "Unicode (UTF-8)" in "Western (ISO Latin 1)" und speichern Sie die Datei. Gehen Sie nun zu Ihrem Mac Excel 2008 und wählen Sie "Datei"> "Importieren"> "CSV auswählen"> "Datei suchen"> "Dateiherkunft". Wählen Sie "Windows (ANSI)" und voila, die UTF-8-Zeichen werden korrekt angezeigt. Zumindest für mich ...
quelle
Ich benutze das und es funktioniert
quelle
# eine UTF-8-CSV in PHP ausgeben, die Excel richtig liest.
quelle
quelle