Thread Zeichensatzproblem mit Š
(15 answers)
Opened by bianca at 2019-06-07 19:07 2019-06-08T17:38:34 bianca Danke für das Beispiel! Das ganze ist mir nun schon klar.
Und nun schau' genau hin: Du hast ein U+00A8 DIAERESIS, ein '¨' in Deiner Regex. Und schon ist es weg, das ISO-LATIN-15-š. Das große hat einfach Pech gehabt. Du hast keinen BROKEN BAR in Deiner Regex. Das Resultat bleibt übrigens das gleiche, wenn Notepad++ Dein Skript unter UTF-8 abspeicherst, Du aber kein use utf8; drin hast. Es gibt einen Satz von Zeichen, die bei UTF-8-Codierung einfach ein Byte 0xC2 vor den ISO-8859-1-Wert gestellt bekommen, und die DIAERESIS gehört dazu. Ein einfacher Test wäre folgender: Nimm einfach das '¨' aus Deiner Regex raus. Wenn ich dann das Skript unter Windows-CP1252 abspeichere und laufen lasse, erhalte ich: Wenn ich das unter UTF-8 abspeichere, dann - schwupp - ist die 16 wieder weg, auch ohne '¨' im regulären Ausdruck. Das liegt daran, dass sich das 'è' aus Deiner Regex in die zwei Bytes "\xc3\xa8" auflöst (es ist kein use utf8; aktiv) und somit auch Deine DIAERESIS eliminiert. Oder, noch gemeiner: Schreibe den BROKEN BAR ¦ in Deine Regex. Schon wird auch das Š ordnungsgemäß (für bestimmte Werte von ordnungsgemäß) rausgefischt. Du hättest den Fehler gar nicht bemerkt, bis zum nächsten Kunden mit einem Sonderzeichen, das Du zufällig nicht drin hast. Gegenseitiges Aufheben von Fehlern ist eine der häufigsten Tücken bei der Behandlung von Zeichenkodierungen! Magst Du solche Zufallsresultate? Wohl eher nein. Es gibt mehrere Ansätze, wie man's richtig macht. Hier meine Empfehlungen:
|