Ok, da hast natürlich recht lieber gleich sauber arbeiten.
Ich beschreibe das Problem noch einmal genau, alle Umformatierungen wieder entfernt, weil nicht zufriedenstelllend.
Mit diesem script erzeuge ich eine csv Datei:
PHP-Code:
#!/usr/bin/perl
#
#
#
#
use File::Copy;
use MP3::Tag;
use File::Find;
use utf8;
use Cwd;
my $dir;
my $i = 0;
my $Text;
##Kopfzeile
print "Nr. ; Artist ; Album ; Track ; Title ; Year ; Name Of File ; Path To File \n \n";
find(\&wanted, '/home/kai/Desktop/Musik');
sub wanted {
if (m/mp3/ || m/MP3/){
$i++; $dir = getcwd;
my $mp3 = MP3::Tag->new($_);
$mp3->config("autoinfo","ID3v2");
my ($title, $track, $artist, $album, $comment, $year, $genre) = $mp3->autoinfo();
$Text = $i." ; ".$artist." ; ".$album." ; ".$track." ; ".$title." ; ".$year. ";" . $_ . ";" . $dir . " \n";
print $Text;
}
}
print "\n;;";print $i;print " Dateien gelistet. \n";
my $CTIME_String = localtime(time);print ";;List generated at: $CTIME_String";
Auf der Konsole sieht die Ausgabe für eine betroffenen Zeile dann zB so aus:
1 ; Die drei ??? ; Die drei ??? 107 und der Schatz der M�nche ; 01 ; 01 - Das geheimnisvolle K�stchen ; ;01 - Das geheimnisvolle Kästchen.mp3;/home/kai/Desktop/Musik
Wenn ich diese Datei mit der Tabellenkalkulation von Open Office öffne, ist die Ausgabe genauso.
Diese Datein werden von einem HTML inkludierten Perl Script gelesen und in eine HTML Tabelle eingefügt. Die Webseite wird im Browser /Firefox / Konqueror) korrekt dargestellt. Auch http://validator.w3.org/ hat nichts zu meckern ist valid HTML 4.01 Transitional und die Umlaute stimmen.
Wenn ich die Datei mit einem Texteditor (gedit / vim) öffne, dann ist die Dartstellung auch korrekt.
Ich verstehe jetzt nicht genau, was ich mit
PHP-Code:
$Text = $i." ; ".$artist." ; ".$album." ; ".$track." ; ".$title." ; ".$year. ";" . $_ . ";" . $dir . " \n";
anstellen soll, um immer eine korrekte Darstellung zu haben.
Am besten wäre es eine Lösung zu finden, die schon bei der Datenerfassung die Buchstaben in ein korrektes Format konvertiert, welches immer richtig ausgegeben wird, da ich das ganze später auf eine Datenbank basierte Lösung umstellen will. (Noch nicht entschieden welchen Datenbank ich benutzen werde MySQL oder weil handy und für die Aufgabe gewachsen vielleicht SQLite). Es wäre also wünschsenswert die Daten von vornherein korrekt in die DB einzutragen und nicht erst beim SELECTen zu konvertiern.
Weder ein:
utf8::encode($Text);
noch ein:
utf8::decode($Text);
noch ein:
utf8::encode($Text);
utf8::decode($Text);
bringt einen zufriedenstellenden Erfolg. Die Ausgabe verändert sich zwar, doch werden die kryptischen Zeichen nur durch andere ersetzt:
Muss ich den String vielleicht zeichenweise abarbeiten, weil er nicht einheitlich formatiert ist?
So ganz habe ich Deinen Code nicht verstanden. Was soll ich denn mit dem String machen?
Grüße.
craano.
Lesezeichen