Yadgar: Verhackte Umlaute trotz <meta charset="UTF-8" />

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

  1. 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

    1. 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

      1. @@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 🖖

        --
        „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann

        1. 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. ↩︎

        1. 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.

          1. @@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 🖖

            --
            „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
            1. 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.


              1. eigentlich ja Encoding, aber dieser Benennungsfehler wird wohl nicht mehr zu korrigieren sein. ↩︎

        2. @@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 🖖

          --
          „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
        3. 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

          1. Schick Dein HTML mal zum Validator. Und melde Ergebnis.

  2. 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

    1. 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.

      1. @@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 🖖

        --
        „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
        1. 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.

          1. @@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 🖖

            --
            „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
            1. 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.

              1. @@dedlfix

                Wenn die Browser die Bittersmannsche Strenge anlegen würden, gäbe es dabei keinen Vorteil.

                Postelsche Gelassenheit sticht Bittersmannsche Strenge.

                LLAP 🖖

                --
                „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
            2. Hallo Gunnar,

              TIL the meaning of "TIL".

              Du offenbar auch, sonst hättest Du dieses NK nicht prompt zweimal präsentiert 😝

              Rolf

              --
              sumpsi - posui - clusi
              1. @@Rolf B

                TIL the meaning of "TIL".

                Du offenbar auch,

                Möp

                sonst hättest Du dieses NK nicht prompt zweimal präsentiert 😝

                NK?

                LLAP 🖖

                --
                „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
                1. Hallo Gunnar,

                  Wenn Du heute was gelernt hast, dann ist das doch wohl New Knowledge.

                  Rolf

                  --
                  sumpsi - posui - clusi
      2. 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

        1. 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.

          1. 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

            1. @@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 🖖

              --
              „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
              1. 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

            2. 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:

              HTML-File mit Fehler in einer IDE

              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.

              Kaputtes DOM in den Entwickler-Tools des Browsers sichtbar

              Man kann es also sehen, dass da was nicht stimmt. Ob man es auch erkennt, ist eine andere Frage.

              dedlfix.

        2. Hallo Yadgar,

          wie hast du denn deine Dateien in UTF-8 umgewandelt?

          Gruß
          Jürgen