[Dresden-pm] Perl, utf8 und Umlaute

Martin Probst (RobHost Support) support at robhost.de
Fr Jun 4 12:11:46 PDT 2010


Hi Steffen,

um es vorweg zu nehmen, mein Problem hat sich größtenteils schon erledigt. Ich hole mir die Daten jetzt als Latin1 und kodiere diese erst bei der Ausgabe zu UTF-8.
Das behebt die meisten Probleme die ich habe.

> "Martin Probst (RobHost Support)" <support at robhost.de> writes:
>> Hi Mongers,
>> 
>> ich habe ein leidiges Problem mit doppelt (manchmal dreifach)
>> kodierten utf8 Umlauten in Perl. Ich habe ein paar Daten und möchte
>> daraus eine XML-Datei machen. Leider nörgelt der abnehmende Parser
>> bei diesen doppelt kodierten Zeichen rum und möchte diese nicht
>> verarbeiten. Da der aber auch nur utf8 versteht 
> 
> Schreib mal bitte noch paar mehr Details, was genau meinst Du mit
> mehrfach kodierten Daten. Du kriegst für einen Umlaut-ü z.B. solche
> Doppelzeichen Ì, meinst Du sowas?

Genau sowas meinte ich.

> 
> Und was meint dreifach? Werden aus einem Zeichen 3 Zeichen oder
> verdoppelt es sich 3x, aus einem werden also 8 Zeichen?
> 
Eben ein 3 Fach kodiertes ü in einer anderen Kodierung z.b., also aus einem ü werden 4  Ìñ.


> Am besten, Du hast mal ein paar Bytes in einer Datei und attachst die
> hier.
> 
> Weiterhin, wie versuchst Du das XML zu erzeugen? Selber oder mit einer
> Lib? Und welcher Parser?

Aus Geschwindigkeitsgründen selbst, vorher aber mit XML::Simple und XML::Writer getestet.
Mit Parser meinte ich auch eher das entgegen nehmende Programme welches scheinbar mit libexpat arbeitet.

> 
> 
>> und Perl in Verbindung mit utf8, Umlauten und regexen so gar nicht
>> klar kommt,
> 
> Das ist definitiv eine Falschaussage, es sei denn, Du redest von
> Uralt-Perls. Welche Perl-Version hast Du denn?

Ist schon die 5.10.0. Allerdings funktioniert unten erwähntes Konstrukt nicht so recht mit dem use utf8; Pragma unter Debian Lenny.

> 
> Wenn Du ein Minimalbeispiel zusammengebaut bekommst, bräuchten wir
> auch nicht rumraten, sondern könnten es direkt lösen. Probier mal, das
> zu liefern. 
> 
> Alles in ein tar.gz verpacken, damit nichts beim Mailen verfälscht
> wird.
> 
> 
>> habe ich es auf diese Art und Weise gelöst:
>> 
>> ...
>>   no utf8;
>>   $text =~ s#[^a-zA-Z0-9ÄÖÜäüöß"\$_\-\.\+%&]# #g;
>>   use utf8;
>> ...
> 
> Du möchtest die Zeichen komplett diskriminieren? Das ist aber
> inkonsequent. :-)

Ja leider ;-), Würde aber den entgegengesetzten Fall, alle Zeichen die man nicht haben möchte vereinfachen, denn im Moment kenne wir nur erstmal die Zeichen die wir haben wollen :-)

> 
> 
>> Im Endeffekt sollen alle Zeichen die nicht in der Regex
>> ausgeschlossen werden, durch ein Leerzeichen ersetzt werden. Leider
>> klappt das mit den doppelt kodierten Zeichen nicht. Habt Ihr eine
>> Idee wie man diese zuverlässig verbannen kann?
> 
> Leicht: einfach *alle* Zeichen durch Spaces ersetzen. :-)
> 
> $text =~ s/./ /g;

Ja die Idee hat ich auch schon, den daraus resultierenden Text kann man allerdings schwerer lesen finde ich :D


> 
> 
>> An den Ursprungsdaten lässt sich leider keine Veränderung vornehmen.
> 
> Das ist ok und stellt keine Bedrohung dar.
> 
> Also flugs konkreter werden. Und uns dafür bissel Zeit gönnen, ich
> kann z.B. nicht rund um die Uhr Mail lesen.
> 

Danke
Maddin

> 
> Kind regards,
> Steffen 
> -- 
> Steffen Schwigon <ss5 at renormalist.net>
> Dresden Perl Mongers <http://dresden-pm.org/>
> _______________________________________________
> Dresden-pm mailing list
> Dresden-pm at pm.org
> http://mail.pm.org/mailman/listinfo/dresden-pm



Mehr Informationen über die Mailingliste Dresden-pm