Kalle_B: utf8 Problem

Hallöle,

MySQL 5

habe die OpenGeoDB in eine neue MySQL- Tabelle eingelesen. Bei der Gelegenheit diese Tabelle als utf8_unicode_ci definiert. Die alten Tabellen sind latin1_german1_ci.

In meinem Editor sieht eine Zeile so aus:
5103;DE;SN;Dresden;Landkreis Meißen;-;Radebeul;13.6432842540266;51.113631945926;01445

also scheint ß das utf8-Zeichen für ß zu sein.

Ich weiss nicht, ob die Daten dort richtig angekommen sind. In phpmyadmin wird "Landkreis Meißen" angezeigt, auf meiner HTML- Seite "Landkreis Meißen", also noch schlimmer.

Wenn ich im phpmyadmin das Feld in "Meißen" ändere, kommt auf der HTML- Seite wieder "Meißen" heraus.

Nun gut, ich kann dieses machen:
      $row_orte = str_replace( 'ß',   'ß', $row_orte );
      $row_orte = str_replace( 'ß', 'ß', $row_orte );

und habe tatsächlich beide Probleme abgefangen. Aber leider nur für die Ausgabe. Für die Suchfunktion nach Orten müsste ich das für die Eingabe also auch noch machen.

Und nun wird's unübersichtlich.

An wieviel Kettengliedern muss ein Umlaut eigentlich vorbei vom Laden in die DB bis zur Anzeige in HTML? Und alle geben wohl ihren Senf dazu?

MfG Kalle

  1. $row_orte = str_replace( 'ß',   'ß', $row_orte );
          $row_orte = str_replace( 'ß', 'ß', $row_orte );

    schau mal hier rein:
    http://de3.php.net/manual/en/function.utf8-encode.php
    http://de3.php.net/manual/en/function.utf8-decode.php

    die php funktionen sollten dir weiter helfen.

  2. Hi,

    habe die OpenGeoDB in eine neue MySQL- Tabelle eingelesen. Bei der Gelegenheit diese Tabelle als utf8_unicode_ci definiert. Die alten Tabellen sind latin1_german1_ci.

    In meinem Editor sieht eine Zeile so aus:
    5103;DE;SN;Dresden;Landkreis Meißen;-;Radebeul;13.6432842540266;51.113631945926;01445

    Ist in der Datei eine Angabe zur Kodierung gemacht, in der die Daten vorliegen?
    Hast du beim Import im PMA eine Angabe gemacht?
    Wie ist die Kodierung der Verbindung im PMA eingestellt?

    Ich weiss nicht, ob die Daten dort richtig angekommen sind. In phpmyadmin wird "Landkreis Meißen" angezeigt,

    Dann sind die Daten entweder beim Einfuegen nicht als UTF-8 interpretiert worden, oder die Kodierung der Connection stimmt nicht.

    auf meiner HTML- Seite "Landkreis Meißen", also noch schlimmer.

    Also UTF-8-Zeichen noch mal als UTF-8 kodiert.

    Wenn ich im phpmyadmin das Feld in "Meißen" ändere, kommt auf der HTML- Seite wieder "Meißen" heraus.

    Also wieder irgendwo nicht uebereinstimmende Kodierung.

    Nun gut, ich kann dieses machen:
          $row_orte = str_replace( 'ß',   'ß', $row_orte );
          $row_orte = str_replace( 'ß', 'ß', $row_orte );

    und habe tatsächlich beide Probleme abgefangen.

    Na ja, du haettest ziemlich fies drumherumge-work-t.

    Und nun wird's unübersichtlich.

    An wieviel Kettengliedern muss ein Umlaut eigentlich vorbei vom Laden in die DB bis zur Anzeige in HTML? Und alle geben wohl ihren Senf dazu?

    So lange sich alle ueber die Kodierung einig sind, ist das "wie viele" egal.

    Such mal im Archiv nach einem von dedlfix' Postings zum Thema; er hat sich schon des oefteren sehr detailiert darueber ausgelassen, an welchen Stellen die verwendete Kodierung ueberall eine Rolle spielt.

    MfG ChrisB

  3. Hallöle Kalle!

    MySQL 5

    Ich hatte ein ähnliches Problem, wobei wohl die eigentliche Verbindung zur DB das Problem bezüglich der Kodierung war.

    Die Anweisung
      @mysql_query("SET NAMES 'utf8'");
    hat das Problem bei mir beseitigt (ich habe das mit in meine DB-Klasse eingebaut).

    Gruß Gunther

    1. Hallöle Gunther,

      Die Anweisung
        @mysql_query("SET NAMES 'utf8'");
      hat das Problem bei mir beseitigt (ich habe das mit in meine DB-Klasse eingebaut).

      Habe die Anweisung in das Ladeprogramm gesetzt und die Datei opengeodb-0.2.4d-UTF8-text-plz.txt nochmal importiert. Nun sind die Umlaute in phpmyadmin richtig zu lesen.

      Allerdings wird beim Auslesen aus "Landkreis Bergstraße" wieder "Landkreis Bergstraße".

      Habe im head der HTML- Datei
      <meta http-equiv="Content-Type"     content="text/html; charset=UTF-8" />
      aber unter Ansicht - Zeichencodierung sagt mir der FF "Westlich (ISO-8859-1)"

      An irgendeiner Schraube muss ich noch drehen.

      MfG Kalle

      1. Hi,

        Habe im head der HTML- Datei
        <meta http-equiv="Content-Type"     content="text/html; charset=UTF-8" />
        aber unter Ansicht - Zeichencodierung sagt mir der FF "Westlich (ISO-8859-1)"

        An irgendeiner Schraube muss ich noch drehen.

        Hoechstvermutlich an der Charset-Angabe im Content-Type-Header, den der Server in seiner Antwort versendet.

        MfG ChrisB

      2. Hallöle Kalle,

        Nun sind die Umlaute in phpmyadmin richtig zu lesen.

        Allerdings wird beim Auslesen aus "Landkreis Bergstraße" wieder "Landkreis Bergstraße".

        Habe im head der HTML- Datei
        <meta http-equiv="Content-Type"     content="text/html; charset=UTF-8" />
        aber unter Ansicht - Zeichencodierung sagt mir der FF "Westlich (ISO-8859-1)"

        Du hast doch bestimmt da einige PHP-Files, die (vorher) involviert sind?
        Bei denen sollte ganz zu oberst auch ein entsprechender Header vorhanden sein, also z.B.:
        header('content-type: text/html; charset=utf-8');

        Natürlich darf vorher noch keine Ausgabe erfolgt sein.

        Gruß Gunther

        1. Hallöle Gunther,

          header('content-type: text/html; charset=utf-8');

          Das war's. Jetzt klappt es sogar mit der Eingabe. Ich kann nach Meißen suchen und finde ihn (den Ort).

          Danke.

          MfG Kalle

      3. Moin!

        Die Anweisung
          @mysql_query("SET NAMES 'utf8'");
        hat das Problem bei mir beseitigt (ich habe das mit in meine DB-Klasse eingebaut).

        Habe die Anweisung in das Ladeprogramm gesetzt und die Datei opengeodb-0.2.4d-UTF8-text-plz.txt nochmal importiert. Nun sind die Umlaute in phpmyadmin richtig zu lesen.

        Allerdings wird beim Auslesen aus "Landkreis Bergstraße" wieder "Landkreis Bergstraße".

        Das Ladeprogramm allein reicht nicht, die SET NAMES muß bei jeglicher DB-Kommunikation gesendet werden, um der Datenbank zu signalisieren, dass du UTF-8 sendest und empfangen willst. Andernfalls geht die DB davon aus, dass du den Standard verwendest, und das scheint bei dir ISO-8859-1 zu sein.

        PS: Besorge dir bitte unbedingt einen Editor, der UTF-8 darstellen kann, nicht diese Krücke, mit der du derzeit die Dateien betrachtest. Andernfalls kriegst du fortlaufend Probleme mit den Umlauten, insbesondere in den Skripten, und natürlich auch beim Erkennen, welcher z.B. Umlaut denn nun wirklich gemeint ist, wenn du nur die durch ISO-8859-1 provozierte Ersatzdarstellung siehst.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. N'abend!

          PS: Besorge dir bitte unbedingt einen Editor, der UTF-8 darstellen kann

          Okay, habe da noch den alten (von 2004) Textpad 4.7.3, der kann die dt. Umlaute. Allerdings ist er mit russisch wieder überfordert:
          Работа с имуществом – доходы в омскую казну
          (wollte nur mal sehen, wie die Forumsoftware damit umgeht).

          Hast du eine Empfehlung für mich? Wenn ich mich schon umstelle, dann richtig.

          MfG Kalle

          1. Moin!

            Hast du eine Empfehlung für mich? Wenn ich mich schon umstelle, dann richtig.

            Wir haben da ein ganz vorzügliches Linkverzeichnis, auch auf Editorsoftware.

            - Sven Rautenberg

            --
            "Love your nation - respect the others."