Jens Schärer: UTF-8 Zeichen umwandeln

Hallo,
hab hier ein "kleines" Problem. Ich habe hier ein Datenbank-Dump vorliegen (kann nicht erneut erstellt werden, ich muss mit der jetzigen Datei arbeiten!) in welchem UTF-8-Zeichen im Klartext drin stehn.

Beispiele:

[..] wie etwa in html u8c3bcblich [...]
[...] bleiben clevere sparer jederzeit flu8c3bcssig [...]
[...] die gesundheitlichen vorteile werden extra ausgehu8c3a4ngt wir wu8c3bcnschen allen viel spau8c39f beim probieren [...]

So, wie bekomm ich diese Zeichen umgewandelt, welcher Editor beherrscht das? Gibts irgendwas dafür in PHP? Irgendein Converter vielleicht.

Seltsam: für die Kodierung für ein "ü" (u8c3bc) wird sowohl für Groß- und Kleinschreibung der selbe Code verwendet.

Irgendjemand eine Idee?

Gruß,
Jens

  1. Moin!

    hab hier ein "kleines" Problem. Ich habe hier ein Datenbank-Dump vorliegen (kann nicht erneut erstellt werden, ich muss mit der jetzigen Datei arbeiten!) in welchem UTF-8-Zeichen im Klartext drin stehn.

    Naja, irgendwie ist das alles andere als "Klartext".

    Aber es scheint so, als ob jedes dieser Zeichen mit dem Präfix "u8" beginnt, und danach zwei Hexzahlen mit den in UTF-8 verwendeten Bytes folgen. Hab ich jetzt nicht explizit geprüft, wäre aber mein erster Ansatz dafür. Die üblichen deutschen Umlaute beginnen jedenfalls alle mit dem gleichen ersten UTF-8-Byte, und das ist in deinem Textauszug ebenfalls so. Ob dieses A-Tilde jetzt als 0xC3 codiert wird, hab' ich nicht im Kopf.

    Beispiele:

    [..] wie etwa in html u8c3bcblich [...]
    [...] bleiben clevere sparer jederzeit flu8c3bcssig [...]
    [...] die gesundheitlichen vorteile werden extra ausgehu8c3a4ngt wir wu8c3bcnschen allen viel spau8c39f beim probieren [...]

    - Sven Rautenberg

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

      Aber es scheint so, als ob jedes dieser Zeichen mit dem Präfix "u8" beginnt, und danach zwei Hexzahlen mit den in UTF-8 verwendeten Bytes folgen.

      Hab ich jetzt nicht explizit geprüft [...]

      Aber ich. Es ist tatsächlich so, jedenfalls für das "ä" und das "ü".

      Am einfachsten ginge es wohl mit einem Perl-Script, das solche Codes wieder in "echte" Bytes zurückverwandelt.

      Leider ist die Länge in Bytes von UTF-8-codierten Zeichen variabel, d.h. man kann sich nicht darauf verlassen, das auf "u8" immer genau 4 Bytes für zwei Hexzahlen folgen, es könnten auch mal 6 Bytes oder mehr sein. Das kommt darauf an, ob nur normaler deutscher Text vorkommt, oder auch mal chinesische oder sonstwie exotische Zeichen.

      Wie viele Bytes es jeweils sind, ist aber eindeutig: Alle Hex-Codes, die zum UTF-8-Zeichen gehören, sind größer als 7Fh.

      Gruß, Don P

      1. Hallo Don P,

        Leider ist die Länge in Bytes von UTF-8-codierten Zeichen variabel, d.h. man kann sich nicht darauf verlassen, das auf "u8" immer genau 4 Bytes für zwei Hexzahlen folgen, es könnten auch mal 6 Bytes oder mehr sein. Das kommt darauf an, ob nur normaler deutscher Text vorkommt, oder auch mal chinesische oder sonstwie exotische Zeichen.

        Die UTF-8 Kodierung umfasst 1x1 Byte bis 4x1 Byte, also 1-4 Bytes.

        u -> Kodepunkt = x75 (117dec) -> UTF-8-Kodierung = 75 -> 1 Byte
        ü -> Kodepunkt = xFC (252dec) -> UTF-8-Kodierung = C3BC -> 2 Byte
        € -> Kodepunkt = x20AC (8364dec) -> UTF-8-Kodierung = E282AC -> 3 Byte (EURO SIGN)
        𐎠 -> Kodepunkt = x103A0 (66464dec) -> UTF-8-Kodierung = F0908EA0 -> 4 Byte (OLD PERSIAN SIGN A)

        Gruß Uwe

      2. Moin!

        Leider ist die Länge in Bytes von UTF-8-codierten Zeichen variabel, d.h. man kann sich nicht darauf verlassen, das auf "u8" immer genau 4 Bytes für zwei Hexzahlen folgen, es könnten auch mal 6 Bytes oder mehr sein. Das kommt darauf an, ob nur normaler deutscher Text vorkommt, oder auch mal chinesische oder sonstwie exotische Zeichen.

        Aber genau das ist in den Bytes mit codiert. Ein "Folgebyte" besteht immer aus binär 10xx xxxx, während das erste Byte durch die Anzahl an 1-Bits zu Beginn die Anzahl der Folgebytes angibt. 110x = 1 Folgebyte, 1110 = 2 Folgebytes... Siehe Wikipedia et al...

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. Hallo amolip,
          Hallo Sven,

          Aber genau das ist in den Bytes mit codiert. Ein "Folgebyte" besteht immer aus binär 10xx xxxx, während das erste Byte durch die Anzahl an 1-Bits zu Beginn die Anzahl der Folgebytes angibt. 110x = 1 Folgebyte, 1110 = 2 Folgebytes... Siehe Wikipedia et al...

          Ja klar, ich wollte nur nicht so weit ins Detail gehen, weil es zur Lösung des Problems im Prinzip ausreicht, wenn man weiß:

          Alle Hex-Codes, die zum UTF-8-Zeichen gehören, sind größer als 7Fh.

          Gruß, Don P

  2. Hello,

    Beispiele:

    [..] wie etwa in html u8c3bcblich [...]
    [...] bleiben clevere sparer jederzeit flu8c3bcssig [...]
    [...] die gesundheitlichen vorteile werden extra ausgehu8c3a4ngt wir wu8c3bcnschen allen viel spau8c39f beim probieren [...]

    Mit welchem Editor hast Du Dir die Datei angesehen?
    Was könnte der eventuell für die Anzeige schon wieder verändert haben?
    Wird Dir da wirklich eine bytegenaue "Übersetzung" angezeigt?

    Was sagt ein Hexeditor bei diesen Zeilen?

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)