Umlaute in der DOS-Umgebung

Liebe/-r Experte/-in,
ich habe ein Perl-Script geschrieben, mit dem eine Textdatei nach einem Suchwort durchsucht werden soll.
Wurde das Suchwort gefunden, soll das Script mir die entsprechende Zeile in der DOS Eingabeaufforderung ausgeben.
Alles klappt so wie ich es mir vorgestellt habe, leider werden die deutschen Umlaute nicht richtig ausgegeben oder gesucht.

Hier einmal das Script, das ich mit Perl V 5.12.0 laufen lasse. Die Textdatei ist UTF-8 codiert gespeichert.

&START();
&EINGABE();
if ($suche eq „Hilfe“){
&HILFE();
&EINGABE();
&SUCHE();
}

else{
&SUCHE();
}

&ENDE();

sub START{
#################################################
print „=======================================================\n“; # Gib folgenden Text aus
print „= InLib Version 1.0 =\n“; #
print „=======================================================\n“; #

$file = ‚inlib.ibf‘; # Datenbankfile
$ausgabedatei=„Ergebnis.txt“; # Filename zuweisen
$helpfile=„Hilfe.txt“;
open (AUSGABE,">$ausgabedatei"); # Ausgabedatei leeren und bereit machen für
close (AUSGABE); # die Ausgabe eines neuen Suchergebnisses
} #
#################################################

sub EINGABE{
#################################################
print ">> "; # Schreibe „>>“
$suche=; # Suchbegriff eingeben
chomp($suche); # Zeilenumbruch entfernen
#################################################
}

sub SUCHE{
#################################################
print „\n“;
print „\n“;
open (AUSGABE,">> $ausgabedatei"); # Ausgabedatei zum anhängen öffnen
open(INFO, $file); # Datenbankfile zum lesen öffnen
while(1){ #
if(eof(INFO)) {last; } # Verlasse die Schleife wenn das Ende der Datei erreicht ist
$lines = ; # Key einlesen

chomp($lines); # Zeilenumbruch entfernen
if ($lines =~ /$suche/i) { # Wenn der Suchbegriff gefunden wurde
print „$lines\n“; # hänge die Fundzeile an die Ausgabedatei an
$found++; # und erhöhre den Fundzähler um 1
} #

} #
print „\nSuchbegriff : $suche\n“; # Schreibe ins Suchergebniss wie oft der Suchbegriff
print „Treffer : $found“; # gefunden worden ist.
print „\n“;
print „\n“;
} #
#################################################

sub ENDE{
#################################################
close(INFO); # Datenbankdatei schließen
close(AUSGABE); # Ausgabedatei schließen
} #
#################################################

sub HILFE{
#################################################
open(HELP, $helpfile); # Helpfile zum lesen öffnen
while (1){ # Undendliche Schleife
if(eof(HELP)) {last; } # Verlasse die Schleife wenn das Ende der Datei erreicht ist
$lines = ; # Zeile einlesen
print $lines; # Zeile ausgeben
} #
close (HELP); # Hilfedatei schliessen
#################################################
}

Hi docagebra,

leider scripte ich nicht für DOS, sondern für Web-Apps, aber evtl. kann ich dir ein ganz klein wenig helfen, da ich eine Vermutung habe - entweder DOS mag so gar keine deutschen Umlaute oder das Script fummelt sich an diesen ab (ich tendiere zu ersterem, Mrs.G sagt dazu:

„DOS (und damit auch die historisch aus DOS entstandene Eingabeaufforderung) kodiert Umlaute anders als Windows. Um diese Kodierung zu beschreiben, werden sogenannte Codepages verwendet. So ist in der Eingabeaufforderung auf einem deutschen Windows standardmäßig die Codepage 850 (DOSLatin1) aktiv, in der grafischen Benutzeroberfläche dagegen die Codepage 1252 (WinLatin1). Zum Umschalten zwischen verschiedenen Codepages dient in der Eingabeaufforderung der Befehl chcp. Damit können Sie vor der Ausgabe in eine Datei auch für die Eingabeaufforderung die Windows-Codepage auswählen: chcp 1252.“

Also könntest du mittels (quick n dirty):
$string=~s/ä/ae/g;
$string=~s/ö/oe/g;
$string=~s/ü/ue/g;

Das Problem umgehen… alternativ lässt sich vielleicht auch DOS zu einer Umlaut-Ausgabe bewegen, aber w.g. ist DOS nicht wirklich meine Welt :wink: Mrs.G weiß mehr Rat.

Viele Grüße

Dos selber macht wohl keine Probleme bei der Ausgabe der Umlaute, hab in der Batchdatei die Zeile chcp 1252 eingebaut. Geb ich jetzt als Suchbegriff einen Umlaut an, zeigt die Ausgabe zwar, das ich danach gesucht habe, er findet aber keinen Treffer. Muss also was Perl Internes sein. Trotzdem schon mal danke für die schnelle Antwort.