Umlautprobleme von CSV UTF-8 nach Excel
Linuchs
- sonstiges
Moin,
danke für Diskussion und Hilfe bei der Erzeugung einer Adressdatei „on the fly” (Senden ohne vorheriges Speichern) im CSV-Format.
Nun meldet der Anwender ein Folgeproblem. Excel kommt mit UTF-8 nicht zurecht. Ich arbeite mit LibreOffice und der/die/das erkennt UTF-8, fragt aber sicherheitshalber noch mal:
Kann ich das beeinflussen, etwa indem ich per PHP noch einen header mitsende? Was ist, wenn die CSV-Datei zunächst gespeichert wird, dann müsste sie ein BOM (byte-order mark) enthalten?
Oder muss der Empfänger in seinem Windoof-Umfeld irgendwas schrauben?
Ich kann's leider nicht testen, weil ich dieses Betriebssystem nicht habe.
Gruß, Linuchs
Ich kann's leider nicht testen, weil ich dieses Betriebssystem nicht habe.
Zeig mal URL zur CSV. MFG
Hallo Linuchs,
Excel kommt mit UTF-8 nicht zurecht.
Doch, schon:
Nur - Excel hat da einen Bug, oder ein Amok laufendes Feature, wie man will...
Eine CSV Datei mit Semikolon als Trenner, die ohne BOM gespeichert ist, wird von Excel als "das kann ich alleine" angesehen und mit der Windows Defaultcodepage importiert. Welche das genau ist, dürfte von den Regionseinstellungen abhängen. In Deutschland dürfte es ISO-8859-15 (oder -1) sein. Der Konfigurationsdialog geht gar nicht erst auf.
Enthält die CSV Datei ein BOM, geht der Dialog auf und bietet "Codepage 65001", also UTF-8, als Encoding an.
Benennt man die .csv Datei in .txt um, dann geht der Dialog ebenfalls auf und bietet UTF-8 als Encoding an. Man kann sie auch auf .csvu umbenennen, als sichtbares Zeichen für "CSV im UTF-8 Encoding"...
Dieses Posting ist gültig für Excel 2016, andere Versionen habe ich nicht da.
Rolf
Tach!
In Deutschland dürfte es ISO-8859-15 (oder -1) sein.
Eher Windows-1252.
Enthält die CSV Datei ein BOM, geht der Dialog auf und bietet "Codepage 65001", also UTF-8, als Encoding an.
Kommt bei mir (Excel 2013) drauf an. Wenn ich die Datei über den Öffnen-Dialog öffne, dann kommt der Importer, beim Doppelklick im Explorer geht sie ohne Fragen auf (mit BOM auch korrekt dekodiert).
dedlfix.
Tach!
Nun meldet der Anwender ein Folgeproblem. Excel kommt mit UTF-8 nicht zurecht. Ich arbeite mit LibreOffice und der/die/das erkennt UTF-8, fragt aber sicherheitshalber noch mal:
Die Frage ist, woran Excel die verwendete Kodierung erkennen soll.
Es ist prinzipbedingt nicht (trivial) möglich, Kodierungen anhand der Binärwerte zweifelsfrei zu erkennen. Es ist in jedem Fall sinnvoll, dem empfangenden System mitzuteilen, welche Kodierung für den Inhalt verwendet wurde. Dummerweise gibt es kein allgemeingültiges System, die Kodierungsinformation für Dateien mitzuführen. Besonders alte Formate haben auch keine Angabe innerhalb des Dokuments vorgesehen oder per Definition einen Standard festgelegt.
Kann ich das beeinflussen, etwa indem ich per PHP noch einen header mitsende?
Bei UTF-8 kann man eine BOM voranstellen, die meist als Indikator verwendet wird, dass es sich um UTF-8 handelt.
Was ist, wenn die CSV-Datei zunächst gespeichert wird, dann müsste sie ein BOM (byte-order mark) enthalten?
Aufgrund welcher Magie? Dafür musst du schon selbst sorgen.
Oder muss der Empfänger in seinem Windoof-Umfeld irgendwas schrauben?
Nein. Du kannst die Default-Kodierung der Windows-Variante des Zielcomputers verwenden. Das ist hierzulande üblicherweise Windows-1252. Oder du speicherst als UTF-8 mit BOM, dann erkennt Excel die Kodierung.
dedlfix.
Oder du speicherst als UTF-8 mit BOM, dann erkennt Excel die Kodierung.
Okay, ich sende den String jetzt so:
echo "\xEF\xBB\xBF" . $csv_string;
Excel erkennt die Umlaute. Danke für die Hilfe.
Linuchs
Hallo Linuchs,
falls Du PHP 7 oder höher einsetzt, sollte auch folgendes funktionieren:
echo "\u{FEFF}".$csv_string;
\uFEFF ist der Unicode Codepoint des BOM, ich denke, damit bist Du vom konkreten Unicode-Transfermodus auf der Leitung (UTF-8, UTF-16 in BE oder LE Geschmack, etc) unabhängig.
Übrigens fand ich eben dies hier - du bist nicht allein 😉
Rolf
hier wird behauptet daß eine CSV Datei in UTF-16LE sowohl auf Windows und auf MacOS mit Excel lesbar ist.
MFG