Verhackte Umlaute trotz <meta charset="UTF-8" />
Yadgar
- browser
- html
Hi(gh)!
Ich versuche jetzt endlich mal, HTML und CSS von der Pike auf zu lernen (nach 24 Jahren dilettantischem Herumgefrickel) - und prompt stellt mir Firefox Quantum 60.3.0esr (64-Bit) unter Linux ein Bein: obwohl ich im Header der HTML-Datei ausdrücklich "UTF-8" als Zeichensatz angegeben habe, muss ich im Browser immer erst von Hand UTF-8 als Kodierung eingeben, andernfalls werden die deutschen Sonderzeichen als kryptischer Zeichensalat angezeigt. Ich finde in den Firefox-Einstellungen nirgendwo die Möglichkeit, eine Standard-Kodierung anzugeben (in früheren Firefox-Versionen ging das)... bin ich immer noch zu dumm dazu?
Bis bald im Khyberspace!
Yadgar
Hallo, welche Kodierung hat das Dokument selbst (im Editor prüfen/einstellen)? Dein Browser stellt die gewünschte Mehrbyte-Kodierung als Einbyte-Kodierung dar, deshalb vermute ich, dass dein Dokument selbst Iso-8859-1 kodiert ist.
Ochse Oberlock, frisch aus dem Weizenbier erwacht
Hi(gh)!
Hallo, welche Kodierung hat das Dokument selbst (im Editor prüfen/einstellen)? Dein Browser stellt die gewünschte Mehrbyte-Kodierung als Einbyte-Kodierung dar, deshalb vermute ich, dass dein Dokument selbst Iso-8859-1 kodiert ist.
Der Editor (kwrite) ist ebenfalls auf utf8 eingestellt! Trotzdem bekomme ich im Browser sowas hier angezeigt:
Ãœberschrift der ersten Ebene Ãœberschrift der zweiten Ebene Ãœberschrift der dritten Ebene
Bis bald im Khyberspace!
Yadgar
@@Yadgar
welche Kodierung hat das Dokument selbst (im Editor prüfen/einstellen)? Der Editor (kwrite) ist ebenfalls auf utf8 eingestellt!
Nicht nur im Editor prüfen, sondern das, was im Browser ankommt, d.h. prüfen, was der Server im HTTP-Header angibt.
Dein Browser stellt die gewünschte Mehrbyte-Kodierung als Einbyte-Kodierung dar, deshalb vermute ich, dass dein Dokument selbst Iso-8859-1 kodiert ist.
Trotzdem bekomme ich im Browser sowas hier angezeigt:
Ãœberschrift der ersten Ebene Ãœberschrift der zweiten Ebene Ãœberschrift der dritten Ebene
Wie das Ochsenauge schon vorausgesehen hat: Das Dokument ist UTF-8-codiert (Ü durch die Bytesequenz C3 9C), wird aber als windows-1252 decodiert (C3 als Ã, 9C als œ).[1]
Da sendet dein Server wohl eine falsche Codierungsinformation, die Vorrang gegenüber der meta-Angabe im Dokument hat (wie im Artikel zur Angabe der Codierung nachzulesen ist). Du musst deinen Server richtig einstellen.
LLAP 🖖
In ISO 8859-x ist 9C ein Steuerzeichen. Da greift der Browser vermutlich auf windows-1252 zurück, selbst wenn ISO 8859-x als Codierung angegeben sein sollte. ↩︎
Tach!
Da sendet dein Server wohl eine falsche Codierungsinformation, die Vorrang gegenüber der meta-Angabe im Dokument hat (wie im Artikel zur Angabe der Codierung nachzulesen ist). Du musst deinen Server richtig einstellen.
Neben den genannten Möglichkeiten im zweiten verlinkten Dokument kann es auch noch eine PHP-Einstellung sein. Es gibt da die Konfigurationsdirektive default_charset, die ebenfalls eine Angabe im HTTP-Header setzen kann.
Der vorliegende Fall zeigt sehr schön, was passieren kann, wenn der Server eine Kodierung vorgibt. Deswegen hab ich auch in jener Diskussion dafür plädiert, dass der Serverbetreiber keine Kodierungsangabe setzt, weil das die Bemühungen des Kunden untergraben kann.
dedlfix.
@@dedlfix
Neben den genannten Möglichkeiten im zweiten verlinkten Dokument kann es auch noch eine PHP-Einstellung sein. Es gibt da die Konfigurationsdirektive default_charset, die ebenfalls eine Angabe im HTTP-Header setzen kann.
Was durchaus im dritten verlinkten Dokument Erwähnung finden könnte/sollte. Todo für mich: Richard Ishida mal anpingen.
LLAP 🖖
Tach!
Neben den genannten Möglichkeiten im zweiten verlinkten Dokument kann es auch noch eine PHP-Einstellung sein. Es gibt da die Konfigurationsdirektive default_charset, die ebenfalls eine Angabe im HTTP-Header setzen kann.
Was durchaus im dritten verlinkten Dokument Erwähnung finden könnte/sollte. Todo für mich: Richard Ishida mal anpingen.
Beachte auch die sich darüber befindende Direktive default_mimetype, denn deren Wert wird als Grundlage für den Content-Type-Header genommen, um die Angabe zum Charset[1] daran anhängen zu können.
dedlfix.
eigentlich ja Encoding, aber dieser Benennungsfehler wird wohl nicht mehr zu korrigieren sein. ↩︎
@@Gunnar Bittersmann
In ISO 8859-x ist 9C ein Steuerzeichen.
Nein. In ISO 8859-x ist 9C gar kein Zeichen. In ISO-8859-x ist 9C ein Steuerzeichen. TIL den Unterschied.
LLAP 🖖
Hi(gh)!
Nicht nur im Editor prüfen, sondern das, was im Browser ankommt, d.h. prüfen, was der Server im HTTP-Header angibt.
Server? Die Datei ist lokal auf meinem Computer abgespeichert... und ich habe (zumindest explizit) keinen Server am Laufen!
Bis bald im Khyberspace!
Yadgar
Schick Dein HTML mal zum Validator. Und melde Ergebnis.
Hallo Yadgar,
hast du ein neues Dokument angelegt oder ein vorhandenes geändert?
Wenn letzteres, hast du das Dokument auch nach UTF-8 konvertiert?
Gruß
Jürgen
Tach!
hast du ein neues Dokument angelegt oder ein vorhandenes geändert?
Wenn letzteres, hast du das Dokument auch nach UTF-8 konvertiert?
Wenn das so gewesen sein sollte, muss man dabei aufpassen, dass der Editor die Zeichen korrekt erkannt hat, bevor man ihn mit der Umkodierung beauftragt. Eine automatische Korrektur wird er nicht vornehmen. Vielleicht wird er versuchen, die Kodierung zu erraten, aber das gelingt nicht in jedem Fall, besonders wenn widersprüchliche Indizien vorliegen.
Gemäß Fehlerbild sieht es jedoch so aus, dass irgendwo eine UTF-8-Kodierung als ISO-8859-1 gelesen wird. Die Vermutung liegt nahe, dass es sich um eine vorlaute Server-Konfiguration handelt, die ohne Rücksicht auf die Belange der Anwendung eine Zeichenkodierung vorgibt.
dedlfix.
@@dedlfix
Gemäß Fehlerbild sieht es jedoch so aus, dass irgendwo eine UTF-8-Kodierung als ISO-8859-1 gelesen wird.
Nein. Als windows-1252.
LLAP 🖖
Tach!
Gemäß Fehlerbild sieht es jedoch so aus, dass irgendwo eine UTF-8-Kodierung als ISO-8859-1 gelesen wird.
Nein. Als windows-1252.
Oder so. Das ist eine Marginalität, die das Ergebnis nicht verbessert.
dedlfix.
@@dedlfix
Gemäß Fehlerbild sieht es jedoch so aus, dass irgendwo eine UTF-8-Kodierung als ISO-8859-1 gelesen wird.
Nein. Als windows-1252.
Oder so. Das ist eine Marginalität, die das Ergebnis nicht verbessert.
Doch! Sonst würde ja nicht Ãœ, sondern nur à (oder gar eine Fehlermeldung?) angezeigt werden. Wenn das keine Verbesserung ist! 😜
TIL den Unterschied zwischen ISO 8859-1 und ISO-8859-1: „Den Positionen 00₁₆–1F₁₆ und 7F₁₆–9F₁₆ sind in ISO/IEC 8859 und damit ISO/IEC 8859-1 keine Zeichen zugewiesen. […] Die von der IANA definierte Bezeichnung ISO-8859-1 (mit Bindestrich) steht für die Kombination der Zeichen dieser Norm mit nicht darstellbaren Steuerzeichen gemäß ISO/IEC 6429.“ [Wikipedia]
LLAP 🖖
Tach!
Gemäß Fehlerbild sieht es jedoch so aus, dass irgendwo eine UTF-8-Kodierung als ISO-8859-1 gelesen wird.
Nein. Als windows-1252.
Oder so. Das ist eine Marginalität, die das Ergebnis nicht verbessert.
Doch! Sonst würde ja nicht Ãœ, sondern nur à (oder gar eine Fehlermeldung?) angezeigt werden. Wenn das keine Verbesserung ist! 😜
Sowas passiert aber nicht. Ich kenne keinen Browser, der nicht Windows-1252 annimmt, wenn ISO-8859-1 angegeben wurde. Warum sollten die Browser ausgerechnet hier streng sein und eine Meldung bringen, wenn sie doch überall sonst stillschweigend die Fehler zu korrigieren versuchen? Insofern sehe ich hier keinen zielführenden Unterschied.
Wenn die Browser die Bittersmannsche Strenge anlegen würden, gäbe es dabei keinen Vorteil. Niemand im Webumfeld braucht den Bereich 7f..9f in unbelegter form oder als die Steuerzeichen von ISO/IEC 6429. Das bei Win-1252 auf 80 liegende €-Zeichen hingegen ist wichtiger als eine Fehlermeldung oder Nicht-Darstellung.
Wie auch immer, es ist im allgemeinen wichtiger, ISO-8859-1 zu erwähnen, weil es aufgrund des Bekannheitsgrades wahrscheinlicher ist, dass diese Angabe im Server konfiguriert ist, auch wenn am Ende der Inhalt tatsächlich als Windows-1252 über die Leitung geht oder als solcher interpretiert wird.
dedlfix.
@@dedlfix
Wenn die Browser die Bittersmannsche Strenge anlegen würden, gäbe es dabei keinen Vorteil.
Postelsche Gelassenheit sticht Bittersmannsche Strenge.
LLAP 🖖
Hallo Gunnar,
TIL the meaning of "TIL".
Du offenbar auch, sonst hättest Du dieses NK nicht prompt zweimal präsentiert 😝
Rolf
@@Rolf B
TIL the meaning of "TIL".
Du offenbar auch,
sonst hättest Du dieses NK nicht prompt zweimal präsentiert 😝
NK?
LLAP 🖖
Hallo Gunnar,
Wenn Du heute was gelernt hast, dann ist das doch wohl New Knowledge.
Rolf
Hi(gh)!
Gemäß Fehlerbild sieht es jedoch so aus, dass irgendwo eine UTF-8-Kodierung als ISO-8859-1 gelesen wird. Die Vermutung liegt nahe, dass es sich um eine vorlaute Server-Konfiguration handelt, die ohne Rücksicht auf die Belange der Anwendung eine Zeichenkodierung vorgibt.
Was denn für ein Server? Lokal auf meinem Rechner? Das Problem habe ich auch, wenn der Apache nicht läuft...
Bis bald im Khyberspace!
Yadgar
Tach!
Was denn für ein Server? Lokal auf meinem Rechner? Das Problem habe ich auch, wenn der Apache nicht läuft...
Ja, was weiß ich denn, bin ich Hellseher? Ich kann aus deiner Beschreibung nur das entnehmen, was du schreibst, und den Rest muss ich vermuten. Die allgemeiner Erfahrung sagt, dass es eine Fehlkonfiguration eines Webservers hätte sein können. Wenn kein Server im Spiel ist, dann ist vielleicht die Angabe zur Zeichenkodierung falsch oder das Dokument selbst nicht richtig kodiert. Ziehst du es per Drag and Drop in den Browser oder öffnest du es über den Menüpunkt "Datei öffnen"?
Ob das Dokument richtig kodiert ist, kann ein Hexdump offenbaren:
hexdump -C dateiname
Es reicht, einen Ausschnitt von der Stelle zu zeigen, an der die Umlaute sind. Wenn du uns das HTML zur Kontrolle zeigen möchtest, dann bitte als Klartext.
dedlfix.
Hi(gh)!
hexdump -C dateiname
Bitteschön:
00000000 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e 0a |<!DOCTYPE html>.|
00000010 3c 68 74 6d 6c 3e 0a 3c 68 65 61 64 3e 0a 20 20 |<html>.<head>. |
00000020 3c 6d 65 74 61 2d 63 68 61 72 73 65 74 3d 22 55 |<meta-charset="U|
00000030 54 46 2d 38 22 20 2f 3e 0a 20 20 3c 74 69 74 6c |TF-8" />. <titl|
00000040 65 3e 53 74 72 75 6b 74 75 72 69 65 72 75 6e 67 |e>Strukturierung|
00000050 65 6e 3c 2f 74 69 74 6c 65 3e 0a 3c 2f 68 65 61 |en</title>.</hea|
00000060 64 3e 0a 3c 62 6f 64 79 3e 0a 20 20 3c 68 31 3e |d>.<body>. <h1>|
00000070 c3 9c 62 65 72 73 63 68 72 69 66 74 20 64 65 72 |..berschrift der|
00000080 20 65 72 73 74 65 6e 20 45 62 65 6e 65 3c 2f 68 | ersten Ebene</h|
00000090 31 3e 0a 20 20 3c 68 32 3e c3 9c 62 65 72 73 63 |1>. <h2>..bersc|
000000a0 68 72 69 66 74 20 64 65 72 20 7a 77 65 69 74 65 |hrift der zweite|
000000b0 6e 20 45 62 65 6e 65 3c 2f 68 32 3e 0a 20 20 3c |n Ebene</h2>. <|
000000c0 68 33 3e c3 9c 62 65 72 73 63 68 72 69 66 74 20 |h3>..berschrift |
000000d0 64 65 72 20 64 72 69 74 74 65 6e 20 45 62 65 6e |der dritten Eben|
000000e0 65 3c 2f 68 33 3e 0a 20 20 3c 70 3e 45 69 6e 20 |e</h3>. <p>Ein |
000000f0 6e 6f 72 6d 61 6c 65 72 20 41 62 73 61 74 7a 3c |normaler Absatz<|
00000100 62 72 2f 3e 6d 69 74 20 5a 65 69 6c 65 6e 75 6d |br/>mit Zeilenum|
00000110 62 72 75 63 68 3c 2f 70 3e 0a 20 20 3c 70 3e 45 |bruch</p>. <p>E|
00000120 69 6e 20 6e 6f 72 6d 61 6c 65 72 20 41 62 73 61 |in normaler Absa|
00000130 74 7a 20 6f 68 6e 65 20 5a 65 69 6c 65 6e 75 6d |tz ohne Zeilenum|
00000140 62 72 75 63 68 3c 2f 70 3e 0a 3c 2f 62 6f 64 79 |bruch</p>.</body|
00000150 3e 0a 3c 2f 68 74 6d 6c 3e |>.</html>|
00000159
Schickes Teil, dieser Hexdump! Ich habe mich schon länger gefragt, ob es für Linux sowas wie damals "EX-DOS" auf dem C 64 gibt... wieder was gelernt!
Es reicht, einen Ausschnitt von der Stelle zu zeigen, an der die Umlaute sind. Wenn du uns das HTML zur Kontrolle zeigen möchtest, dann bitte als Klartext.
Gerne:
<!DOCTYPE html>
<html>
<head>
<meta-charset="UTF-8" />
<title>Strukturierungen</title>
</head>
<body>
<h1>Überschrift der ersten Ebene</h1>
<h2>Überschrift der zweiten Ebene</h2>
<h3>Überschrift der dritten Ebene</h3>
<p>Ein normaler Absatz<br/>mit Zeilenumbruch</p>
<p>Ein normaler Absatz ohne Zeilenumbruch</p>
</body>
</html>
Bis bald im Khyberspace!
Yadgar
@@Yadgar
<!DOCTYPE html> <html> <head> <meta-charset="UTF-8" />
Die Rotfärbung durch den Syntax-Highlighter hätte dir zu denken geben sollen.
Wallpappe sagte auch schon was von Validator – das musst du wohl überlesen haben.
Nochmal: Validator.
U.a. für Probleme mit der Zeichencodierung ist auch der Internationalization Checker recht nützlich.
LLAP 🖖
Hi(gh)!
Die Rotfärbung durch den Syntax-Highlighter hätte dir zu denken geben sollen.
Wallpappe sagte auch schon was von Validator – das musst du wohl überlesen haben.
Nochmal: Validator.
U.a. für Probleme mit der Zeichencodierung ist auch der Internationalization Checker recht nützlich.
Ach du meine Güte... Minuszeichen nach meta, das musste ja schiefgehen! Wie konnte sich das einschleichen... ich code viel zu selten HTML, daran wird es wohl liegen!
Aber dieser Validator ist eine tolle Sache, wirklich! Debugging für HTML, echt cool!
Bis bald im Khyberspace!
Yadgar
Tach!
<meta-charset="UTF-8" />
Also, wenn das der Code deiner Datei ist, dann hast du da ein Minus zu viel, das du im Betreff dieses Threads richtigerweise nicht stehen hast. Dass der Browser die Angabe dann nicht richtig interpretiert, kann man ihm nicht zum Vorwurf machen. Der Hexdump schaute ansonsten in Ordnung aus.
Tipps fürs bessere Arbeiten: Nimm dir einen Editor mit mindestens Syntax-Hervorhebung. Besser noch sind Entwicklungsumgebungen, die den Code analysieren und noch mehr Ungereimtheiten anzeigen können. Das sähe in dem Fall beispielsweise so aus:
Auch ein Blick in die Entwickler-Tools des Browsers können Probleme offenbaren. So sieht das DOM aus, das der Browser aus deinem Code interpretiert hat.
Man kann es also sehen, dass da was nicht stimmt. Ob man es auch erkennt, ist eine andere Frage.
dedlfix.
Hallo Yadgar,
wie hast du denn deine Dateien in UTF-8 umgewandelt?
Gruß
Jürgen