Alexander (HH): umlaut in regulärem Ausdruck

Beitrag lesen

Moin Moin!

Das Problem dürfte nicht die Konsole an sich sein. Sondern das kopieren und der Aufruf direkt im perl interpreter in der Konsole

Also wenn ich das folgende Skript:

use locale;

$_="abcädef ghißjkl";
s/\b/*/g;
print ;


>   
> Mit Notepad++ in ANSI abspeicher und in der Konsole starte, kommt das raus:  
>   
> ~~~perl

C:\...\t.pl  

> *abcõdef* *ghi▀jkl*  
> 

Funktioniert also, nur die Umlaute werden in der DOS Box logischerweise falsch dargestellt.

Puuuuuh, genau damit habe ich eigentlich gerechnet. Wenn Du die Ausgabe in eine Datei umleitest und wieder mit dem Editor als ANSI öffnest, solltest Du auch wieder heile Umlaute sehen.

Wenn ich's aber direkt in Perl starte:

C:>...\perl

use locale;
$_="abcädef ghißjkl";
s/\b//g;
print ;
^Z
abcä
def* ghißjkl


> Funktioniert es nicht, dafür stimmen die Umlaute - sind dann wohl in CP-irgendwas.  
  
Genau, irgendwelche automatischen Konvertierungen beim Eingeben in der DOS-Box machen aus einem ANSI-ä (Windows-1252, Zeichen 228) ein OEM-ä (CP-437 oder CP-850, Zeichen 132). Perl arbeitet mit ANSI und erkennt das OEM-ä als ANSI-õ, das ist in der DE-Locate natürlich kein Wortzeichen. Gemeinerweise wird das, was Perl als ANSI-õ erkennt, in der DOS-Box natürlich wieder als OEM-ä angezeigt.  
  
Und im Webserver/Webbroser ist natürlich erst einmal ISO-8859-1 angesagt, wenn nichts anderes angegeben ist. Windows-1252 ist ISO-8859-1, ergänzt um ein paar Definitionen zwischen 128 und 159, also gibt es keine Konvertierungsprobleme.  
  
Patrick hat wohl Copy&Paste in die DOS-Box gemacht und damit ungewollt die Umlaute demoliert.  
  

> »» Und schon fangen die Kopfschmerzen wieder an ... ;-)  
  
Die Ursache ist hier also die selten dämliche Idee von Microsoft, auf der Kommandozeile einen anderen Zeichensatz als in der GUI zu benutzen. (Vom Standpunkt der DOS-Kompatibilität aus war das natürlich eine gute Idee.)  
  
Alexander

-- 
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".