David Aurelio: Zeichensatz-Problem UTF-8

Beitrag lesen

Hallo Daniel,

Stimmt, es wird "nun", statt dem Euro Zeichen, das "a<kästchen>¬" angezeigt, wenn ich kein utf8_decode() mache. Mache ich das utf8_decode, um die Umlaute anzeigen zu können, wird aus dem Euro ein ?.

Es freut Dich bestimmt nicht, das zu hören, aber PHP verhält sich hier vollkommen korrekt. Das PHP-Manual sagt zu utf8_decode:

utf8_decode — Converts a string with ISO-8859-1 characters encoded with UTF-8 to single-byte ISO-8859-1

Das wolltest Du ja auch. Das Problem ist aber, dass ISO-8859-1 das Euro-Zeichen nicht enthält. Daher fügt PHP bei der Konvertierung ein Fragezeichen ein.

Du könntest alle Euro-Zeichen durch die entsprechende HTML-Entität (&euro;) ersetzen, das geht aber nicht für eine CSV-Datei. Also musst Du einen anderen Zeichensatz für Deine Datei verwenden.

Da gibt es zwei sinnvolle Lösungen:
* Du gibst die Datei einfach als UTF-8 aus. Bei OpenOffice lässt sich das encoding der Datei beim Import angeben, bei Excel weiß ich es nicht.
* Du verwendest Windows-1252 (CP1252). Das sollte mit Excel zusammen auf jeden Fall funktionieren.

Ein weiterer "westlicher" Zeichensatz, der das Euro-Zeichen enthält, ist ISO-8859-15. Der ist aber, was die zusätlzichen Zeichen im Vergleich zu ISO-8859-1 angeht, nicht kompatibel mit Windows-1252. Bringt also wahrscheinlich nicht wirklich was in Bezug auf Excel.

Zur Umwandlung kannst Du dann natürlich nicht mehr utf8_decode() nehmen, dazu gibt es aber auch noch [link:http://php.net/mb-convert-encoding@title=mb_convert_encoding()] und [link:http://php.net/iconv@title=iconv()]. Du musst ausprobieren, was auf dem von Dir verwendeten System verfügbar ist.

header('Content-type: application/csv;');

müsstest Du ändern zu
header('Content-type: application/csv; charset=utf-8'); oder
header('Content-type: application/csv; charset=CP1252'); (statt "CP1252" geht auch "Windows-1252")

Baba Daniel, in der Hoffnung nun noch Antwort zu erhalten :)

sischer datt ;)
Gruß,
David