Tom: UTF-8 Codierung erkennen

Hello,

gibt es eigentlich eine einigermaßen verlässliche Möglichkeit zu erkennen, ob ein Text in utf8 oder anders codiert ist? ISO8859-x darf ja wahrscheinlich alle Bytefolgen enthalten, aber bei utf-8 müsste es doch da ganz bestimmte Lücken geben, oder?

Es würde mir schon reichen, wenn ich erkennen könnte, dass ein Text garantiert nicht fehlerfrei in utf8 codiert ist.

Liebe Grüße aus Syburg bei Dortmund

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de
  1. Hello,

    Der erxte Aspekt der Frage hat sich schon erledigt. Eine Funktion habe ich doch noch gefunden unter
    http://www.php.net/manual/de/function.mb-detect-encoding.php

    Der zeite Aspekt der Frage bleibt aber bestehen: wie funktioniert es?
    Wo sind erkennbare Zeichen/Lücken/Folgen/usw., um das Ganze abzusichern?

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Moin!

      Der erxte Aspekt der Frage hat sich schon erledigt. Eine Funktion habe ich doch noch gefunden unter
      http://www.php.net/manual/de/function.mb-detect-encoding.php

      Der zeite Aspekt der Frage bleibt aber bestehen: wie funktioniert es?
      Wo sind erkennbare Zeichen/Lücken/Folgen/usw., um das Ganze abzusichern?

      Es gibt keine Möglichkeit, einfach eine Bytefolge zu untersuchen, um daraus mit 100% Garantie das exakt verwendete Encoding zu ermitteln.

      Man kann Ausschlußverfahren anwenden: Wenn eine Bytefolge nicht in ein Codierschema paßt, weil Bytes oder Kombinationen von Bytes vorkommen, die es dort nicht gibt, dann kann es das Schema nicht sein - aber noch jedes andere.

      Eventuell ließen sich auch statistische Maßnahmen anwenden, die den Inhalt analysieren und mit Wahrscheinlichkeiten operieren - das ist dann aber von "Sicherheit" weit entfernt.

      Problematisch ist insbesondere, wenn Codierungen zu großen Teilen identisch sind, und nur die Details unterschiedlich, wie beispielsweise ISO-8859-1, Windows-1252 und ISO-8859-15. Solange nur Zeichen vorkommen, die in allen Codierungen gleich sind, ist es egal, welche Codierung festgestellt wird - spannend wird es, wenn Zeichen vorkommen, die als Bytewert in allen Schemata definiert sind, aber jeweils eine unterschiedliche Bedeutung haben.

      Als klassisches Beispiel sei nur auf das Eurozeichen verwiesen: In ISO-8859-1 existiert es nicht, der Bytewert fürs Euro codiert dort das allgemeine Währungssymbol ¤.

      Es ist deshalb unerläßlich, die Codierung immer explizit mit anzugeben, um Probleme beim Wiedereinlesen auszuschließen.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
      1. Hello Gunnar, Dedlfix, Sven,

        Man kann Ausschlußverfahren anwenden: Wenn eine Bytefolge nicht in ein Codierschema paßt, weil Bytes oder Kombinationen von Bytes vorkommen, die es dort nicht gibt, dann kann es das Schema nicht sein - aber noch jedes andere.

        Eventuell ließen sich auch statistische Maßnahmen anwenden, die den Inhalt analysieren und mit Wahrscheinlichkeiten operieren - das ist dann aber von "Sicherheit" weit entfernt.

        Es geht um Texte, deren Codierung leider nicht immer geklärt ist.
        Man müsste also mehrere Passagen daraus ausschneiden und diese einzeln prüfen.

        Wie müsste ich denn schneiden? Ist das Zeilenende-Zeichen in allen üblichen Codierungen (im Prinzip sind es nur ISO8859-X, UTF-8, Windows 1252, ASCII+ CP-437, ASCII+ CP-850) identisch entweder "\r\n" oder "\n" oder "\r" ?

        In den Ein-Byte-Codes dürfte es ja eigentlich keine Schwierigkeiten geben und bei UTF-8 kann es bei längeren Sequenzen ja auch nicht in der Sequenz vorkommen. Oder habe ich was übersehen?

        Man könnte also "Zeilen" in den Codierungen erkennen?

        Liebe Grüße aus Syburg bei Dortmund

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Moin!

          Es geht um Texte, deren Codierung leider nicht immer geklärt ist.
          Man müsste also mehrere Passagen daraus ausschneiden und diese einzeln prüfen.

          Eher nicht.

          Wie müsste ich denn schneiden? Ist das Zeilenende-Zeichen in allen üblichen Codierungen (im Prinzip sind es nur ISO8859-X, UTF-8, Windows 1252, ASCII+ CP-437, ASCII+ CP-850) identisch entweder "\r\n" oder "\n" oder "\r" ?

          Da du dir Codetabellen aller genannten bzw. zu prüfenden Codierungen besorgen mußt, kannst du dir diese Frage ja selbst beantworten.

          - Sven Rautenberg

          --
          "Love your nation - respect the others."
          1. Hello,

            Wie müsste ich denn schneiden? Ist das Zeilenende-Zeichen in allen üblichen Codierungen (im Prinzip sind es nur ISO8859-X, UTF-8, Windows 1252, ASCII+ CP-437, ASCII+ CP-850) identisch entweder "\r\n" oder "\n" oder "\r" ?

            Da du dir Codetabellen aller genannten bzw. zu prüfenden Codierungen besorgen mußt, kannst du dir diese Frage ja selbst beantworten.

            Meine Frage ist ja uch nicht, was ich selber sehen kann, sondern was ich tunlichst nicht übersehen sollte :-)

            Liebe Grüße aus Syburg bei Dortmund

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
    2. echo $begrüßung;

      Der erxte Aspekt der Frage hat sich schon erledigt. Eine Funktion habe ich doch noch gefunden unter
      http://www.php.net/manual/de/function.mb-detect-encoding.php

      Auch diese Funktion wird an folgendem Beispiel scheitern, das du dir ISO-8859-1-kodiert vorstellen musst:

      Das scharfe s ist als UTF8 kodiert und als ISO-8859-1 angezeigt als ß zu sehen.

      Der Text ist gültiges UTF-8, entspricht aber nur dann der Intention des Autor, wenn er als ISO-8859-1 interpretiert wird.

      echo "$verabschiedung $name";

  2. @@Tom:

    gibt es eigentlich eine einigermaßen verlässliche Möglichkeit zu erkennen, ob ein Text in utf8 oder anders codiert ist?

    Ein regulärer Ausdruck dafür ist zu finden in [QA-FORMS-UTF-8].

    Live long and prosper,
    Gunnar

    --
    Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
  3. Hi,

    Es würde mir schon reichen, wenn ich erkennen könnte, dass ein Text garantiert nicht fehlerfrei in utf8 codiert ist.

    utf-8 detection

    Gruß, Cybaer

    --
    Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
    (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
    1. Hello,

      Es würde mir schon reichen, wenn ich erkennen könnte, dass ein Text garantiert nicht fehlerfrei in utf8 codiert ist.

      utf-8 detection

      Danke, diese Funktion hatte sie ja sogar schon gebunkert, nur leider falsch einsoriert.
      Nun habe ich sie wiedergefunden und gleich noch zwei interesante Funkionen dabei, die ich sonst heute hätte neu schreiben müssen ;-)

      Ordnung ist das halbe Leben und die andere Hälfte beschäftigt man sich mit suchen.

      Liebe Grüße aus Syburg bei Dortmund

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hi Tom!

        Danke, diese Funktion hatte sie ja sogar schon gebunkert, nur leider falsch einsoriert.

        Die hättest du aber auch in den Userkommentaren auf der von die verlinkten Seite zur Funktion mb_detect_encoding gefunden.
        Ich hätte dir das schon vorher geschrieben, wenn ich gewusst hätte, dass du dir die Kommentare nicht durchgelesen hättest. =)

        MfG H☼psel

        --
        "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
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
        1. Hi,

          Die hättest du aber auch in den Userkommentaren auf der von die verlinkten Seite zur Funktion mb_detect_encoding gefunden.

          Nein, die Funktion ist ein wenig anders. Aufgrund des Rückgabewerts kann man u.a. feststellen, ob es sich bei dem UTF-8-Text nicht um einen einfachen ANSI-Text handelt.

          Gruß, Cybaer

          --
          Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
          (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)