• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Umlaute werden falsch dargestellt

Baumeister

Neues Mitglied
Hallo,
ich erstelle für meine Wetter-Webseite einen Textbaustein, in dem das momentane Wetter lesbar sein wird.
Der Text setzt sich zusammen aus selbst geschriebenem und einem Part, der von meinem Wetterauswertprogramm kommt.
In dem Auswertprogramm wird er richtig angezeigt, auf meiner Webseite werden die Umlaute nicht dargestellt.
So sieht der fertige Text aus:

Hallo Nachtschwärmer, heute ist Sonntag, 4. Dezember 2011. Willkommen bei emscherwetter.
Heute gab es noch keinen Niederschlag, der Letzte war vor 1 Tag, 11 Minuten.
Momentan haben wir keinen Niederschlag.
Die derzeitige Temperatur beträgt 8,5 °C.
In der vergangenen Stunde hat sich die Temperatur um -0,1 °C verändert.
Der aktuelle Luftdruck beträgt 996,9 hpa, Tendenz fallend.
Und die weiteren Aussichten: Meistens wolkig und k�hler. Niederschl�ge wahrscheinlich. M�gliche Wind�nderung nach W, NW oder N.


Der rote Text kommt aus dem Programm.
Das hat doch irgendwas mit charset zu tun.
Hier mein head-Bereich:


<head><meta name="generator" content="Wetterstation Bedien- und Auswertesoftware - V2.96.0"><meta content="de" http-equiv="Content-Language" /><meta name="keywords" content="wetter,emscher,ruhr,nrw,ruhrgebiet,ruhr,schnee,orkan,sonne,regen,wind,solar,thema des tages,tagesthema,allergie,pollen,pollenflug,pollenflugvorhersage,solarstrahlung,uv,uv-index,dortmund,bochum,herne,castrop-rauxel,recklinghausen,hamm,unna,kamen,luenen,waltrop,datteln,gelsenkirchen,essen,marl,bottrop,duisburg,muehlheim,unwetter,warnung,hagel,sturm"/><meta name="google-site-verification" content="KcmkxdilmZRudtlmBfCx4iD-Ag2sJndID146damUv_E" /><meta content="text/html; charset=utf-8" http-equiv="Content-Type" /><title> Guten Tag</title><style type="text/css">.style1 { font-family: Arial, Helvetica, Sans-Serif; font-size: 12px;}</style></head>Weiß da wohl jemand, wie ich das Übel behoben bekomme ?Danke für Eure Hilfe.Axel
 
Header-Angaben werden häufig von Server-Angaben überschrieben. Testen kannst du das etwa mit diesem Tool: W3C I18n Checker

Du müsstest zudem ermitteln, in welchem Zeichensatz der Text von dem Wetterprogramm geliefert wird. Wenn du das nicht kannst (Support fragen?), fertige bitte einen Hex-Dump des Strings an und poste diesen.

Es dürfte eine von drei oder vier wahrscheinlichen Möglichkeiten sein. UTF-8, Windows-1252, ISO-8859-1, …
 
Das Fragezeichen ist normalerweise ein iso Zeichen auf einer UTF-8 Seite (umgekehrt, werden zwei Zeichen angezeigt).
 
Du musst einfach nur sicher stellen, dass ALLE Bestandteile der gesamten Seite in UFT8 sind.
Wenn du den Text "wolkig und kühler" in Klartext in deinem Programm stehen hast, muss der Quelltext vom Programm in UTF8 gespeichert sein.
(Wegen einem Bug in PHP muss das UTF8 ohne BOM sein)
Wenn der Text aus einer Datenbank kommt, muss die DB-Verbindung auf UTF8 eingestellt sein.
Und dann musst du auch noch sicher stellen, dass der verwendete Browser das auch kapiert, bei den meisten Browsern kann der User unter "Ansicht-Codierung" einstellen was er sehen will, und wenn das fest auf irgendwas eingestellt ist, nutzen alle UFT8 header nichts.

Einfachere Lösung, wenn auch heutzutage etwas veraltet: Im Quelltext alle Sonderzeichen in Codes umsetzen.
ä = &auml
usw.
 
Mark schrieb:
(Wegen einem Bug in PHP muss das UTF8 ohne BOM sein)

Bisschen übertrieben vielleicht, das als Bug zu bezeichnen. Ich finde es ganz angenehm, dass PHP einmal nicht den Weg des geringsten Widerstands geht und alle denkbaren Variationen zulässt, sodass am Ende niemand mehr wirklich weiß, woran er ist.

Und dann musst du auch noch sicher stellen, dass der verwendete Browser das auch kapiert, bei den meisten Browsern kann der User unter "Ansicht-Codierung" einstellen was er sehen will, und wenn das fest auf irgendwas eingestellt ist, nutzen alle UFT8 header nichts.

Ja, da kannst du als Seitenersteller aber ohnehin nichts machen. Es lohnt nicht, sich darüber den Kopf zu zerbrechen. Wichtig ist es, das passende Charset im HTTP-Header mit der Seite auszuliefern.

Einfachere Lösung, wenn auch heutzutage etwas veraltet: Im Quelltext alle Sonderzeichen in Codes umsetzen.
ä = &auml
usw.

Warum genau einfacher? Weil Konzepte nicht gelernt werden müssen, die eigentlich ohnehin jeder kennen sollte, der sich mit sowas befasst? Aufgeschoben ist nicht aufgehoben.

Ich denke, rein von den Arbeitsschritten gibt sich das nicht viel.

- Handling character encodings in HTML and CSS
- Internationalisierung
 
Zuletzt bearbeitet:
Vielen Dank,
Problem ist damit gelöst.
Ich habe im Header-Bereich "charset=ISO-8859-1" eingebaut.
Damit wird der vom ext. Programm gelieferte Schriftsatz korrekt angezeigt.
Bei den selbstgeschriebenen Umlauten habe ich auf &auml ... zurück
gegriffen.
 
Um den eigenen header nicht verändern zu müssen gibt es für Inhalte auch noch die Funktionen utf8_decode() und utf8_encode(). Damit lassen sich solche Probleme meistens auch beheben.
 
Ging es dem Threadersteller eigentlich jemals um PHP? Na ja, egal, bleibt natürlich ein guter Hinweis.

Baumeister schrieb:
Ich habe im Header-Bereich "charset=ISO-8859-1" eingebaut.
Damit wird der vom ext. Programm gelieferte Schriftsatz korrekt angezeigt.
Bei den selbstgeschriebenen Umlauten habe ich auf &auml ... zurück
gegriffen.

Ich erwähne mal der Vollständigkeit halber, dass sogar ISO-8859-1 deutsche Umlaute enthält.

Vermutlich ist die Quellcode-Datei, in die die Wetterdaten eingebunden werden, in UTF-8 kodiert (müsste im Editor einstellbar sein). Sinnvoll wäre es, die Wetterdaten ebenfalls nach UTF-8 umzuwandeln. Weniger sinnvoll wäre es, die Kodierung der Quellcode-Datei nach ISO-8859-1 zu ändern. Das ist aber meines Erachtens alles besser, als die Umlaute als Entities auszuschreiben.

Aus eigener leidvoller Erfahrung: Man kann über Jahre grübelnd vor solchen Kodierungsproblemen stehen, weil sie immer wieder in neuen Variationen auftreten, oder man kann sich einmal mit der Materie befassen und weiß dann in Zukunft, was passiert.

Edit: ↓ Stimmt, guter Punkt.
 
Zuletzt bearbeitet:
Danke, du hast schon recht,
mir ist nur aufgefallen, dass hier der header einer Webseite geändert wurde um Texte von externen Seiten korrekt anzuzeigen, was natürlich nicht im Sinne des Erfinders sein kann.

Wer externe Daten übernimmt, sollte sie an seine Bedürfnisse anpassen und nicht umgekehrt.
 
Ich glaube es ist umgekehrt. Wie gesagt, das Fragezeichen ist ISO, also die Wetterdaten sind in ISO und die Seite war in UTF.
 
Jip, das klingt plausibel.

Falls du mich meinst: Das wollte ich auch aussagen. Sorry, wenn das nicht so klar durchkam.

Die binäre Kodierung von ä, ö, ü in ISO-8859-1 wird in UTF-8 als Bestandteil eines Multibyte-Characters interpretiert (weil das höchste Bit gesetzt ist). Weil aber kein zweites Byte folgt/vorangeht (so genau habe ich es jetzt nicht nachgelesen), das als Teil eines Multibyte-Characters interpretiert wird (1 Byte umfassende ASCII(7)-Zeichen sind 1:1 kompatibel zu [noparse]UTF-8[/noparse]), weiß „UTF-8“ mit einem alleinstehenden Multibyte-Character-Teil nichts anzufangen und rendert ein Fragezeichen.
 
Zurück
Oben