Thread ~s findert string nicht wieder (2 answers)
Opened by mazorro at 2018-05-23 08:17

haj
 2018-05-23 10:24
#188435 #188435
User since
2015-01-07
437 articles
BenutzerIn

user image
Hallo mazorro,

An dem Skript sind mir gleich mehrere Dinge aufgefallen, die gar nichts mit UTF-8 zu tun haben. Vielleicht kannst Du uns einen Beispiel-String zur Verfügung stellen, bei dem das Programm nicht das tut, was Du erwartest - und am besten auch einige, bei denen es das richtige tut?

Hier mal zwei verdächtige Beispiele, was der Code-Abschnitt aus verschiedenen Werte von $utfzeile macht:
  • "foo" wird zu foo"
  • "(abc)" oder "a\b" oder "3$" laufen in eine Endlosschleife

Zum ersten Punkt: Das abschließende Hochkomma kommt nicht in $teilzeile, wird also bei der Substitution s/$teilzeile/$neuzeile/ gar nicht angefasst.

Zum zweiten Punkt: Ein wesentlicher Unterschied zwischen index und regulären Ausdrücken ist der, dass bei letzteren alle möglichen Zeichen eine Sonderfunktion haben. Wenn irgendeins von denen zwischen Hochkommas eingeschlossen ist, dann wird die Substition schiefgehen. Anstelle von
Code (perl): (dl )
$utfzeile =~ s/$teilzeile/$neuzeile/;

musst Du dies also abstellen, am einfachsten so:
Code (perl): (dl )
$utfzeile =~ s/\Q$teilzeile\E/$neuzeile/;

Und nun kurz zum "ü": Wenn eine Datei ein Byte xFC enthält, dann kann man sie gar nicht als UTF-8-Datei einlesen - Perl stirbt beim Versuch mit utf8 "\xFC" does not map to Unicode. Da muss auch vorher schon was schiefgelaufen sein.

View full thread ~s findert string nicht wieder