hallo
hallo
Hier lese ich filenamen über readdir ein und gebe das Ergebnis an HTML aus, während der HTML Output als UTF-8 deklariert ist.
readdir liefert keine kodierten Zeichenketten. Von daher ist
encode_utf8
nicht nur überflüssig sondern falsch.Was das Anlegen von Dateien betrifft:
Um nicht erlaubte Zeichen im Namen kümmert sich die Shell. Da Perl an der Shell vorbei mit dem OS kommuniziert, musst Du Dich selbst darum kümmern. Hierzu ist festzustellen, daß Perl auch Dateien mit unerlaubten Zeichen im Namen anlegen kann. Und es gibt Dateien, die können nach dem Anlegen nicht mit Perl, jedoch in der Shell gelöscht werden. Es ist also auch eine Frage, ob und wie Deine Dateien wieder sichbar gemacht werden können.
Teste das am Besten mal selbst:
use strict; use wanings; use IO::File; my $dir = "d:/tmp/files"; my $fh = IO::File->new; # Dateien anlegen foreach my $c ( 0..255 ){ my $filename = pack "C", $c; $fh->open("$dir/$filename", O_CREAT|O_RDWR) or do{ printf "Kann Datei mit Name %s Ord %d nicht anlegen\n", $filename, $c; next; }; } # Dateien löschen chdir $dir or die $!; my @files = <*>; foreach my $f( @files ){ unlink "$dir/$f" or do { printf "\nKann Datei %s, %d nicht löschen: $!\n", $f, unpack "C", $f; next; }; }
$_ =~ /[^A-Za-z0-9_.-]/ and warn($_ . "\n" .unpack( "C", $f));
Ich wollte schon immer chinesisch lernen.
孓慴⁏捴′㜠ㄵ㨲㔺㈲′〱㡝楳獥摩琮灬㨠浵獩欭湯瑥渭曼爭杩瑡牲攮桴浬ਜ਼卡琠佣琠㈷‱㔺㈵㨲㈠㈰ㄸ崠歩獳敤楴氺‱〹琠䌺⽕獥牳⽂敡琯䑯捵浥湴猯扥慴瑯散歬楮栯桴浬⽰氯歩獳敤楴氠汩湥‱ㄵ⸊孓慴⁏捴′㜠ㄵ㨲㔺㈲′〱㡝楳獥摩琮灬㨠ﱀ耮瑸琊孓慴⁏捴′㜠ㄵ㨲㔺㈲′〱㡝楳獥摩琮灬㨠㈲㠠慴⁃㨯啳敲猯䉥慴⽄潣畭敮瑳⽢敡琭獴潥捫汩渮捨⽨瑭氯灬⽫楳獥摩琮灬楮攠ㄱ㔮
Wir nähern uns eindeutig der Lösung.