Madeleine: Richtiges encoding

Hallo zusammen,

ich habe ein Problem mit der Darstellung von Umlauten in meinen HTML-Dokumenten. Diese werden nämlich, wenn ich die Umlaute uncodiert in den HTML-Code reinschreibe nicht richtig dargestellt un das obwohl ich utf-8 eingestellt habe.

Kann mir jemand sagen wie ich erreichen kann, dass ich die Umlaute im HTML-Code nicht codieren muss (also z.B. ü für ü) und die Umlaute trotzdem richtig dargestellt werden?

Die Vorgabe UTF-8 ist übrigens Pflicht und kann sie somit nicht ändern.
Hier noch der Code des <head>-Bereiches einer Datei:

<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="language" content="de, deutsch, german">

<title></title>
</head>

Habe ich hier was falsch gemacht?

Danke im Voraus
Grüssle
Madeleine

  1. Hi,

    ich habe ein Problem mit der Darstellung von Umlauten in meinen HTML-Dokumenten. Diese werden nämlich, wenn ich die Umlaute uncodiert in den HTML-Code reinschreibe nicht richtig dargestellt un das obwohl ich utf-8 eingestellt habe.

    UTF-8 ist 8-Bit-Unicode. Es können also insgesamt nur 128 Zeichen gezeigt werden. Für Umlaute zum Beispiel musst du 16-Bit-Unicode verwenden.

    Kann mir jemand sagen wie ich erreichen kann, dass ich die Umlaute im HTML-Code nicht codieren muss (also z.B. &uuml; für ü) und die Umlaute trotzdem richtig dargestellt werden?

    Soweit ich weiß, _musst_ du entweder einen Zeichensatz wählen, der Umlaute anzeigt, oder die Umlaute in Unicode angeben (u = &#252;) bzw. den HTML-Namen verwenden (&uuml;).

    MfG Hopsel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    1. echo $begrueszung;

      UTF-8 ist 8-Bit-Unicode. Es können also insgesamt nur 128 Zeichen gezeigt werden. Für Umlaute zum Beispiel musst du 16-Bit-Unicode verwenden.

      Das stimmt nicht. Bitte informiere dich über Unicode, Unicode Transformation Format (UTF) und UTF-8

      echo "$verabschiedung $name";

    2. Hallo,

      UTF-8 ist 8-Bit-Unicode. Es können also insgesamt nur 128 Zeichen gezeigt werden. Für Umlaute zum Beispiel musst du 16-Bit-Unicode verwenden.

      Waah! Völliger Unsinn! Bitte informiere Dich über Unicode, UCS und UTF-8 http://www.cl.cam.ac.uk/~mgk25/unicode.html, http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8, http://www.unicode.org/unicode/faq/, http://www.unicode.org/faq/utf_bom.html.

      UTF-8 kann bis zu 6 Byte je Zeichen verwenden und _weit_ mehr als 128 Zeichen kodieren. Die 8 steht auch nicht für 8 Bit für _jedes_ Zeichen, sondern für 8 Bit als _kleinste_ mögliche Zeichengröße. Die Zeichen, welche in UTF-8 8 Bit lang sind, entsprechen in ihrer Kodierung US-ASCII. Das hat man so gemacht, weil sonst sofort alle englischsprachigen Texte doppelt so viel Speicherplatz beansprucht hätten. Es handelt sich also um die Arroganz der Muttersprache derjenigen, die den Standard estellt haben ;-)).

      Soweit ich weiß, _musst_ du entweder einen Zeichensatz wählen, der Umlaute anzeigt, oder die Umlaute in Unicode angeben (u = &#252;) bzw. den HTML-Namen verwenden (&uuml;).

      Beide Entities, also &#252; und &uuml; sind das selbe UCS in dezimaler Form bzw. in Textform. Nichts davon hat mit UTF zu tun.

      viele Grüße

      Axel

      1. Hi,

        vielleicht sollte ich in Zukunft meine Schnauze halten und nicht über Dinge reden, von denen ich sowieso keine Ahnung habe.
        Danke für die Links.

        MfG Hopsel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
  2. echo $begrueszung;

    Kann mir jemand sagen wie ich erreichen kann, dass ich die Umlaute im HTML-Code nicht codieren muss (also z.B. &uuml; für ü) und die Umlaute trotzdem richtig dargestellt werden?

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">

    Du sagst zwar, dass die Daten UTF-8 wären, wahrscheinlich sind sie es aber nicht. Außerdem hat die Einstellung in den HTTP-Headern Vorrang vor der Angabe im META-Tag eines HTML-Headers

    Habe ich hier was falsch gemacht?

    Verwende einen Editor, der die Dateien UTF-8-kodiert und nicht ISO-8859-1/win1252/irgendwas abspeichert oder stelle die Kodierung in dem von dir verwendeten Editor ein.

    Außerdem solltest du die Konfiguration deines Webservers kontrollieren, ob der oben erwähnte HTTP-Header eingestellt ist.

    echo "$verabschiedung $name";

    1. Hallo dedlfix

      Du sagst zwar, dass die Daten UTF-8 wären, wahrscheinlich sind sie es aber nicht. Außerdem hat die Einstellung in den HTTP-Headern Vorrang vor der Angabe im META-Tag eines HTML-Headers

      Was meinst Du mit Einstellung in den HTTP-Headern? Habe ich da Einfluss darauf?

      Habe ich hier was falsch gemacht?

      Verwende einen Editor, der die Dateien UTF-8-kodiert und nicht ISO-8859-1/win1252/irgendwas abspeichert oder stelle die Kodierung in dem von dir verwendeten Editor ein.

      Das habe ich nun gemacht und siehe da...es funktioniert. Ich verwende UltraEdit, und da gibt es die Möglichkeit, die Dateien von ASCII in UTF-8 umzuwandeln.

      Danke für den Tipp. Trotzdem verstehe ich Deinen Punkt "Einstellung in den HTTP-Headern noch nicht so ganz. Kannst Du mir das nochmal erklären?

      Dankeschön
      Grüssle
      Madeleine

      1. echo $begrueszung;

        Was meinst Du mit Einstellung in den HTTP-Headern? Habe ich da Einfluss darauf?

        Es gibt zwei Möglichkeiten, dem Client (Browser) zu sagen, in welchem Zeichensatz die Daten codiert sind, die er gleich zu Gesicht bekommt. Zum einen ist dies durch eine entsprechende charset-Angabe in der HTTP-Header-Zeile Content-Type möglich, zum anderen in dem META-Tag im HTML-Header.
        Die HTTP-Header-Angabe hat Vorrang (hoffentlich weiß das der IE auch).

        Im Apachen kann man die HTTP-Header-Angabe, sofern der Administrator das erlaubt hat, mit der Direktive AddDefaultCharset oder AddCharset (für bestimmte Dateiendungen) einstellen.

        echo "$verabschiedung $name";

  3. Hello,

    das ist für mich das neue Babylon:

    http://de.wikipedia.org/wiki/UTF-8

    Aber wenn man lange genug hinschaut, wird man es wohl begreifen;-))
    Nur in 100 Jahren oder mehr kann das kein Mensch mehr zurückcodieren.
    Schreiben und Lesen wird somit wieder zur Geheimwissenschaft.
    Ich weigere mich daher, das zu aktepieren.
    Menschen brauchen eine einfache Darstellung oder wenigstens mnemonischen Code und keine "Cryptologie".

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. echo $begrueszung;

      Menschen brauchen eine einfache Darstellung oder wenigstens mnemonischen Code und keine "Cryptologie".

      Wieso? Menschen schreiben doch weiterhin äöü und 你好, nur der Computer schreibt es intern als äöü und ä½ å¥½

      echo "$verabschiedung $name";

      1. Hello,

        Wieso? Menschen schreiben doch weiterhin äöü und 你好, nur der Computer schreibt es intern als äöü und ä½ å¥½

        Diese Frage meinst Du doch jetzt wohl hoffentlich nicht ernst?

        Sobald direkte sinnliche Wahrnehmung des gespeicherten Wortes nicht mehr zu einer Deutung führen kann, sondern erst dekodiert werden muss, haben wir das neue Babylon bestens vorbereitet. Das paradoxe daran ist, dass dies unter dem "Deckmantel" der Verbesserung der internationalen Kommunikation stattfindet.

        Die Erfindung des Unicode muss also von einem anderen Stern stammen und die Leute müssen uns abgrundtief hassen ;-))

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. echo $begrueszung;

          Menschen schreiben doch weiterhin äöü und 你好, nur der Computer schreibt es intern als äöü und ä½ å¥½

          Diese Frage meinst Du doch jetzt wohl hoffentlich nicht ernst?

          Doch, warum nicht?

          Sobald direkte sinnliche Wahrnehmung des gespeicherten Wortes nicht mehr zu einer Deutung führen kann, sondern erst dekodiert werden muss, haben wir das neue Babylon bestens vorbereitet.

          Das hat doch schon damals[tm] angefangen als jemand daherging und die bis dato verbreitete sinnliche Wahrnehmung des Akustischen (Sprache) in eine optische Darstellung (Keilschrift usw.)umwandelte. Seither sprechen die Menschen auch nicht in Keilen :-)

          Und dass der Computer unsere bekannten schriftzeichen in eine Bitfolge umwandelt hat auch noch nicht den Untergang der Menschheit herbeigeführt.

          Die Erfindung des Unicode muss also von einem anderen Stern stammen und die Leute müssen uns abgrundtief hassen ;-))

          Wenn's die Amis (oder war Baudot der Übeltäter?) gleich richtig gemacht hätten, hättest du dich schon längst dran gewöhnt.

          echo "$verabschiedung $name";

          1. Hallo,

            Und dass der Computer unsere bekannten schriftzeichen in eine Bitfolge umwandelt hat auch noch nicht den Untergang der Menschheit herbeigeführt.

            Nein, aber bei UTF liegt der Fall etwas anders. Zeige mir eine Charmap (Zuordnungtabelle), in der jeweils einem Zeichen ein UTF-Code zugeordnet ist. Meines Wissen nach gibt es die nicht. Es gibt die Unicode-Zeichentabellen, die jedem Zeichen UCS-Code zuordnen und man braucht _zusätzlich_ einen Algorthmus, um aus dem UCS dann endlich UTF zu machen und umgekehrt, wieder das Zeichen zu erzeugen.

            viele Grüße

            Axel

            1. echo $begrueszung;

              Nein, aber bei UTF liegt der Fall etwas anders. Zeige mir eine Charmap (Zuordnungtabelle), in der jeweils einem Zeichen ein UTF-Code zugeordnet ist. Meines Wissen nach gibt es die nicht. Es gibt die Unicode-Zeichentabellen, die jedem Zeichen UCS-Code zuordnen und man braucht _zusätzlich_ einen Algorthmus, um aus dem UCS dann endlich UTF zu machen und umgekehrt, wieder das Zeichen zu erzeugen.

              Interpretiere ich deine Aussage so richtig, dass es zwar für "alle" Zeichen eine UCS-Kodierung gibt, aber keine UTF-8-Kodierung?
              Und dass man besser irgendwann einen harten Schnitt zugunsten von UCS hätte machen sollen und den "UTF-X-Käse" (unterschiedlich lange Kodierung aus historischen Gründen) niemals erlaubt/erfunden haben sollte?

              echo "$verabschiedung $name";

              1. Hallo,

                Interpretiere ich deine Aussage so richtig, dass es zwar für "alle" Zeichen eine UCS-Kodierung gibt, aber keine UTF-8-Kodierung?

                Doch, die gibt es schon. Jeder UCS-Code ist UTF transformierbar. Allerdings für US-ASCII eben je Zeichen 8-Bit lang und für andere Sprachen ggf. je Zeichen bis zu 3 Bit lang, wobei eigentlich der Bereich U0000 - UFFFF, also 16 Bit je Zeichen, für alle Sprachen ausreichen würde. Nur ganz spezielle Sonderzeichen müssten mehr Speicher verbrauchen.

                Das Hauptproblem liegt aber darin, dass man das Zeichen nicht im Unicode sendet und speichert, sondern _nochmals_ Rechenkapazität je Zeichen aufwenden muss, um es UTF zu kodieren. Das war bei ASCII bzw. ANSI und in den ISO-Codemaps nicht erforderlich. Der Speicher enthielt einfach den Hex-Code des Zeichens, nicht nochmals eine Transformation.

                Und dass man besser irgendwann einen harten Schnitt zugunsten von UCS hätte machen sollen und den "UTF-X-Käse" (unterschiedlich lange Kodierung aus historischen Gründen) niemals erlaubt/erfunden haben sollte?

                Ja, der Meinung bin ich.

                viele Grüße

                Axel

                1. Hallo,

                  je Zeichen bis zu 3 Bit lang,

                  ^*g* natürlich bis zu 3 Byte, also 24 Bit lang.

                  viele Grüße

                  Axel

                2. Hallo Axel,

                  Und dass man besser irgendwann einen harten Schnitt zugunsten von UCS hätte machen sollen und den "UTF-X-Käse" (unterschiedlich lange Kodierung aus historischen Gründen) niemals erlaubt/erfunden haben sollte?
                  Ja, der Meinung bin ich.

                  Was hindert Dich denn, UTF-32 oder für gängige Zeichen UTF-16 zu benutzen? UTF-8 ist ja nur eine der Transformationsformate der Unicode Codepoints.

                  Tim

                  1. Hallo,

                    Was hindert Dich denn, UTF-32 oder für gängige Zeichen UTF-16 zu benutzen?

                    Nichts. Ich plädierte doch bereits für UCS. UTF-16 _ist_ UCS-2, nur der Bereich außerhalb von UCS-2 wird mit 2x16Bit codiert. UTF-32 _ist_ UCS-4 ;-)).

                    Allerdings wird man dafür auf noch geringere Unterstützung in fertiger Software stoßen. MySQL z.B. unterstützt direkt nur UCS-2 und UTF-8, _wenn_ die Version 4.1 von MySQL überhaupt vom Hoster zur Verfügung gestellt wird. Die Browserunterstützung, und diesmal nicht nur die des IE ;-)), für Formulare mit accept-charset="UTF-16" bzw. "UTF-16BE" oder "UTF-16LE" ist auch nicht sehr berauschend, von "UTF-32" mal ganz abgesehen.

                    Wie ich sagte, wir werden mit UTF-8 leben müssen.

                    viele Grüße

                    Axel

      2. Hallo,

        Wieso? Menschen schreiben doch weiterhin äöü und 你好, nur der Computer schreibt es intern als äöü und ä½ å¥½

        Ja, aber Tom hat schon ein wenig Recht. Wenn schon Internationalisierung, dann gleichberechtigt. Warum US-ASCII-Texte im Speicherverbrauch gegenüber z.B. kyrillischen Texten so stark bevorzugen und dafür so ein kompliziertes Kodierungssystem einführen? Warum nicht alles UCS-kodieren?

        Aber leben müssen wir nun damit ;-)).

        viele Grüße

        Axel

  4. Madeleine,

    ich habe ein Problem mit der Darstellung von Umlauten […] obwohl ich utf-8 eingestellt habe.

    Wo hast du das eingestellt? Andersrum: Wo nicht?

    Du solltest in deinem Texteditor UTF-8 einstellen. Haste sicher.

    Dein Webserver muss die Information über UTF-8 als Codierung rausschicken. Die Angabe
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    wird möglicherweise vom Server mit dessen Einstellung überschrieben, wie dedlfix schon sagte. [https://forum.selfhtml.org/?t=104831&m=646840]

    Lass dir in einem Browser (der das kann, also nicht MSIE) die Seiteninformation anzeigen. Welche Codierung steht dort?

    Gunnar

    PS. Welche Software wertet die Angabe
      <meta name="language" content="de, deutsch, german">
    aus? Die Sprache gibst du besser so an:
      <meta http-equiv="content-language" content="de">
    und
      <html lang="de">
    (was nicht dasselbe ist). [W3C Authoring Techniques for XHTML & HTML Internationalization: Specifying the language of content 1.0]

    --
    “I got my finger on the trigger / But I don’t know who to trust” (Bruce Springsteen, Devils and Dust)