Anzeige:
Ergebnis 1 bis 2 von 2

Thema: Perl En-Dash herausfiltern (Zeichensatzproblematik)

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer
    Registriert seit
    02.09.2004
    Ort
    Mannheim
    Beiträge
    102

    Perl En-Dash herausfiltern (Zeichensatzproblematik)

    Hi,
    in einem Perl Programm beziehe ich aus Webservice unter anderem einen String. (Der Webservice ist Salesforce.com, das verwendete Modul ist WWW:Salesforce::Simple).

    Dieser String enthält offenbar einen bestimmten Gedankenstrich.
    Gebe ich dir ord() der Zeichen des Strings aus, kommt an der fraglichen Stelle der Wert "8211".

    Wie kann ich nun diesen Wert gegen zB ein "X" austauschen.
    Ich weiss nicht, wie der String codiert ist. Ich arbeite unter OS X und habe nichts definiert, ging daher von UTF-8 aus.

    Dort wäre dieses Zeichen dann Hex e2 80 93
    U+2013 – \xe2\x80\x93 – – EN DASH

    Also versuchte ich mit diesen beiden Ersetzungen:
    Code:
    $descr =~ s/\x{e28093}/X/g;
    $descr =~ s/\xe2\x80\x93/X/g;
    natürlich ohne Erfolg.

    Wie komme ich da weiter?

    Danke für Tipps.
    (Ich hasse Zeichensatzprobleme!!! )

    VG Thomas
    Greetz
    Thomas
    - Jabber-IM: tschloss-at-gmail.com -

  2. #2
    Registrierter Benutzer
    Registriert seit
    02.09.2004
    Ort
    Mannheim
    Beiträge
    102

    Lösung gefunden (aber warum ist ein Byte 16+ bit breit?)

    Habe via "Text:ump" einen Hexdump des Strings anzeigen lassen.
    Das betreffende Zeichen wird durch Hex 2013 beschrieben.
    Faszinierenderweise nicht durch zwei separate Bytes "20 13" (was ja einem Leerzeichen und einem chr(19) entspräche), sondern durch ein Doppelbyte (wird auch in einer Byte-Spalte so durch den Hex-Dumper so angezeigt). Warum verläßt der Hex-Dumper seine byteweise Darstellung und zeigt hier ein Doppelbyte in einer Spalte an? Fragen über Fragen.

    Jedenfalls erwischt folgendes Perl-Statement dieses Zeichen:
    Code:
    $descr =~ s/\x{2013}/-/g;  #En-dash in some items, to be replaced by a normal -
    Ein \x20\x13 trifft übrigens nicht. (Wieder die Frage: Was untercheidet dieses Doppelbyte von zwei einzelnen Bytes? Sind wir hier etwa in 32+ Bit Umgebungen unterwegs und nimmt ein Byte heute tatsächlich schon 16 Bit im Speicher ein?)

    VG Thomas
    Greetz
    Thomas
    - Jabber-IM: tschloss-at-gmail.com -

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •