Wir haben eine Web-App, die CSV-Dateien mit Fremdzeichen mit UTF-8 ohne Stückliste exportiert. Sowohl Windows- als auch Mac-Benutzer erhalten Müllzeichen in Excel. Ich habe versucht, mit Stückliste auf UTF-8 zu konvertieren. Excel / Win ist in Ordnung damit, Excel / Mac zeigt Kauderwelsch. Ich verwende Excel 2003 / Win, Excel 2011 / Mac. Hier sind alle Codierungen, die ich ausprobiert habe:
Encoding BOM Win Mac
-------- --- ---------------------------- ------------
utf-8 -- scrambled scrambled
utf-8 BOM WORKS scrambled
utf-16 -- file not recognized file not recognized
utf-16 BOM file not recognized Chinese gibberish
utf-16LE -- file not recognized file not recognized
utf-16LE BOM characters OK, same as Win
row data all in first field
Das beste ist UTF-16LE mit Stückliste, aber die CSV wird nicht als solche erkannt. Das Feldtrennzeichen ist ein Komma, aber das Semikolon ändert nichts.
Gibt es eine Codierung, die in beiden Welten funktioniert?
mb_convert_encoding($str, "UTF-16LE");
in meinem Exportcode und die Ergebnisse hier posten.Antworten:
Excel-Codierungen
Ich fand die
WINDOWS-1252
Codierung am wenigsten frustrierend im Umgang mit Excel. Da es sich im Grunde genommen um einen Microsoft-eigenen Zeichensatz handelt, kann man davon ausgehen, dass er sowohl auf dem Mac als auch auf der Windows-Version von MS-Excel funktioniert. Beide Versionen enthalten mindestens einen entsprechenden Selektor für "Dateiursprung" oder "Dateicodierung", der die Daten korrekt liest.Je nach System und die Werkzeuge , die Sie diese Codierung verwenden, auch genannt werden könnte
CP1252
,ANSI
,Windows (ANSI)
,MS-ANSI
oder nurWindows
unter anderen Variationen.Diese Codierung ist eine Obermenge von
ISO-8859-1
(auch bekannt alsLATIN1
und andere), sodass Sie zurückgreifen können,ISO-8859-1
wenn Sie sie nicht verwenden könnenWINDOWS-1252
aus irgendeinem Grund . Beachten Sie, dassISO-8859-1
einige Zeichen fehlen,WINDOWS-1252
wie hier gezeigt:Notiere dass der Euro-Zeichen fehlt . Diese Tabelle finden Sie bei Alan Wood .
Umwandlung
Die Konvertierung erfolgt in jedem Tool und jeder Sprache anders. Angenommen, Sie haben eine Datei, von
query_result.csv
der Sie wissen, dass sieUTF-8
codiert ist. Konvertieren Sie es zuWINDOWS-1252
verwendeniconv
:quelle
WINDOS-1252
, was höchstwahrscheinlich sowohl von Mac als auch von Windows Excel korrekt interpretiert wird.Für UTF-16LE mit Stückliste erkennt Excel die Felder, wenn Sie anstelle von Kommas Tabulatorzeichen als Trennzeichen verwenden. Der Grund dafür ist, dass Excel tatsächlich seinen Unicode * .txt-Parser verwendet.
Vorsichtsmaßnahme : Wenn die Datei in Excel bearbeitet und gespeichert wird, wird sie als tabulatorgetrenntes ASCII gespeichert. Das Problem ist nun, dass Excel beim erneuten Öffnen der Datei davon ausgeht, dass es sich um eine echte CSV-Datei (mit Kommas) handelt, dass es sich nicht um Unicode handelt. Analysiert sie daher als durch Kommas getrennt - und erstellt daher einen Hash daraus!
Update : Die obige Einschränkung scheint für mich heute zumindest in Excel 2010 (Windows) nicht zu passieren, obwohl es einen Unterschied im Speicherverhalten zu geben scheint, wenn:
verglichen mit:
quelle
sep=,
Die Codierung der ersten Zeile und der UTF16LE funktionierte für mich und erforderte kein anderes Trennzeichen (es blieb ein Komma). Durch Öffnen der Datei durch Doppelklick wurde die Datei korrekt geladen, wobei Sonderzeichen und Zeilenumbrüche in den Zellen intakt waren. Nachteil: Dersep=,
Header wird von keinem Programm außer Excel erkannt, soweit ich gesehen habe. OpenOffice / LibreOffice erfordern diesen Hack jedoch ohnehin nicht (Zeilenumbrüche im Zelleninhalt funktionieren einwandfrei, während das Laden aus einer Textdatei / die Verwendung des Text in Spalten-Assistenten in Excel Zeilenumbrüche in Zellen nicht ordnungsgemäß behandelt).Das Wichtigste ist: Es gibt keine Lösung. Excel 2011 / Mac kann eine CSV-Datei mit Umlauten und diakritischen Zeichen nicht richtig interpretieren, unabhängig davon, welche Codierung oder welchen Umfang Sie verwenden. Ich würde mich freuen, wenn mir jemand etwas anderes sagt!
quelle
Sie haben nur durch Kommas und Semikolons getrennte CSVs ausprobiert. Wenn Sie CSV mit Tabulatoren (auch TSV genannt) ausprobiert hätten, hätten Sie die Antwort gefunden:
UTF-16LE mit Stückliste (Byte Order Mark), tabulatorgetrennt
Aber : In einem Kommentar erwähnen Sie, dass TSV keine Option für Sie ist (ich konnte diese Anforderung in Ihrer Frage jedoch nicht finden). Das ist schade. Dies bedeutet häufig, dass Sie die manuelle Bearbeitung von TSV-Dateien zulassen, was wahrscheinlich keine gute Idee ist. Die visuelle Überprüfung von TSV-Dateien ist kein Problem. Darüber hinaus können Editoren so eingestellt werden, dass sie ein Sonderzeichen zum Markieren von Registerkarten anzeigen.
Und ja, ich habe das unter Windows und Mac ausprobiert.
quelle
Hier ist der Clou zum Importieren von utf8-codiertem CSV in Excel 2011 für Mac: Microsoft sagt: "Excel für Mac unterstützt UTF-8 derzeit nicht." Excel für Mac 2011 und UTF-8
Yay, weit weg MS!
quelle
Die beste Problemumgehung zum Lesen von CSV-Dateien mit UTF-8 auf dem Mac besteht darin, sie in das XLSX-Format zu konvertieren. Ich habe ein Skript von Konrad Foerstner gefunden, das ich ein wenig verbessert habe, indem ich Unterstützung für verschiedene Trennzeichen hinzugefügt habe.
Laden Sie das Skript von Github https://github.com/brablc/clit/blob/master/csv2xlsx.py herunter . Um es auszuführen, müssen Sie ein Python-Modul openpyxl für die Bearbeitung von Excel-Dateien installieren :
sudo easy_install openpyxl
.quelle
In meinem Fall hat dies funktioniert (Mac, Excel 2011, sowohl kyrillische als auch lateinische Zeichen mit tschechischen Diakritika):
quelle
Es scheint mir, dass Excel 2011 für Mac OS Encoding.GetEncoding ("10000") nicht verwendet, wie ich dachte und 2 Tage damit verschwendete, aber die gleiche ISO wie unter Microsoft OS. Der beste Beweis dafür ist, eine Datei in Excel 2011 für MAC mit speziellen Zeichen zu erstellen, sie als CSV zu speichern und sie dann im MAC-Texteditor zu öffnen, und die Zeichen werden verschlüsselt.
Für mich hat dieser Ansatz funktioniert - was bedeutet, dass der CSV-Export unter Excel 2011 unter MAC OS spezielle westeuropäische Zeichen enthält:
quelle
UTF-8 ohne Stückliste funktioniert derzeit für mich in Excel Mac 2011 14.3.2.
UTF-8 + BOM funktioniert, aber BOM wird als Kauderwelsch gerendert.
UTF-16 funktioniert, wenn Sie die Datei importieren und den Assistenten abschließen, jedoch nicht, wenn Sie nur darauf doppelklicken.
quelle
Folgendes hat für mich unter Excel für Mac 2011 und Windows Excel 2002 funktioniert:
Konvertieren Sie die Datei mit iconv auf einem Mac in UTF-16 Little-Endian + nennen Sie sie * .txt (die Erweiterung .txt zwingt Excel, den Textimport-Assistenten auszuführen):
iconv -f UTF-8 -t UTF-16LE filename.csv >filename_UTF-16LE.csv.txt
Öffnen Sie die Datei in Excel und wählen Sie im Textimport-Assistenten:
PS Der von iconv erstellte UTF-16LE hat am Anfang Stücklistenbytes FF FE.
PPS Meine ursprüngliche CSV-Datei wurde auf einem Windows 7-Computer im UTF-8-Format (mit den Stücklistenbytes EF BB BF am Anfang) erstellt und verwendet CRLF-Zeilenumbrüche. Komma wurde als Feldtrennzeichen und einfaches Anführungszeichen als Textqualifizierer verwendet. Es enthielt ASCII-Buchstaben sowie verschiedene lateinische Buchstaben mit Tildes, Umlaut usw. sowie einige kyrillische Buchstaben. Alle werden in Excel für Win und Mac korrekt angezeigt.
PPPS Exakte Softwareversionen:
* Mac OS X 10.6.8
* Excel für Mac 2011 v.14.1.3
* Windows Server 2003 SP2
* Windows Excel 2002 v.10.2701.2625
quelle
Unter meinem Mac OS identifizierte Text Wrangler eine mit Excel erstellte CSV-Datei als "westlich" codiert.
Nach einigem googeln habe ich dieses kleine Skript erstellt (ich bin mir nicht sicher, ob Windows verfügbar ist, vielleicht mit Cygwin ?):
$ cat /usr/local/bin/utf8.sh
quelle
In meinem Fall hat das Hinzufügen der Präambel zur Datei mein Problem gelöst:
quelle
Versuchen Sie anstelle von CSV, HTML mit einer XLS-Erweiterung und dem MIME-Typ "application / excel" auszugeben. Ich weiß, dass dies unter Windows funktioniert, kann aber nicht für MacOS sprechen
quelle
br
Tag) eingebettet haben , ignoriert Excel für Mac das (funktioniert mit Windows) CSSmso-data-placement:same-cell;
Das funktioniert bei mir
Wählen Sie nun als Schlüsselpunkt MacIntosh als Dateiursprung (dies sollte die erste Wahl sein).
Dies verwendet Excel 2011 (Version 14.4.2)
* Am unteren Rand des Fensters befindet sich ein kleines Dropdown-Menü
quelle
Lösen Sie dies mit Java (UTF-16LE mit Stückliste):
Beachten Sie, dass die CSV-Datei verwendet werden sollte
TAB
als Trennzeichen verwendet werden sollte. Sie können die CSV-Datei sowohl unter Windows als auch unter MAC OS X lesen.Siehe: Wie codiere / decodiere ich UTF-16LE-Bytearrays mit einer Stückliste?
quelle