PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl Mp3 Script



Marcl
27.02.2006, 11:42
Hallo
ich habe mir ein Perl Script installiert was die Platte nach Mp3s durchsucht und diese komplett mit Pfad in eine SQL DB einträgt um sie dann später durch einen Client der diese DB ausliesst per SMB abzuspielen.
Das Problem ist, das das Script die Umlaute nicht übersetzt sondern halt in Sonderzeichen Einträgt und der Windows Client damit natürlich nichts anfangen kann da der die Ordner ja ordentlic aufgelistet bekommt.

Hat da jemand eine Idee?

Gruß Marcel

Xanti
27.02.2006, 12:30
Treten die Sonderzeichen in den mp3-Tags auf oder in den Filenamen auf? Bei zweitem empfehle ich Dir die Boardsuche, da sowas schon oft gefragt wurde. Als Beispiel hier:

http://www.unixboard.de/vb3/showthread.php?t=14313&
oder http://www.unixboard.de/vb3/showthread.php?t=17799&

Gruss, Phorus

cremi
27.02.2006, 12:34
ich würd das perscript so umbauen, dass es die umlaute ausmärzt (zb: ä->ae).

da musst du halt die strings durchsuchen befor du sie in die DB schreibst, aber das sollte ja kein problem sein. ein bischen länger wirt das script halt laufen aber das wird ja nicht so gragisch sein ;)

nic
27.02.2006, 13:53
ich würd das perscript so umbauen, dass es die umlaute ausmärzt (zb: ä->ae).
Ich fuerchte fast, dass ihm das nicht helfen wird, da Windows die Files ja dann auch nicht findet.
Oder meintest du komplett die Dateien umzubenennen? Das wuerde natuerlich funktionieren und waer vermutlich auch garkeine schlechte Loesung, da Umlaute sowieso meist nur Aerger verursachen.

Ansonsten wie schon gesagt wurde wird dir die Boardsuche vermutlich schon weiterhelfen, sonst einfach mal den entsprechenden Teil des Scripts posten, dann laesst sich bestimmt was machen ;)

cremi
27.02.2006, 13:59
Oder meintest du komplett die Dateien umzubenennen? Das wuerde natuerlich funktionieren und waer vermutlich auch garkeine schlechte Loesung, da Umlaute sowieso meist nur Aerger verursachen.


genau das meine ich - denn dann ist er die umlaute ein für alle mahl los!

Marcl
27.02.2006, 14:08
Das einzigste Problem liegt ja nur im Lokalen Pfad...Die Infos nimmt der sich aus dem Tag nur den Link zum SMB Pfad den versaut der halt durch den Lokalen Pfad.
Kann ich durch die SQL Anweisung nicht auch durch ne SMB Freigabe auslesen?
Das heißt die Titel durch sagen wir mal \\Server\mp3\Alben suchen und nicht durch /mnt/hdb1/mp3/Alben
Wüsste einer wie das funktioniert?

heady
27.02.2006, 14:16
mal ne frage, kann ich eventuell dieses skript haben?? so was wär für mich auch nicht schlecht...aber ich kann es verstehen, falls dir dein source heilig ist...

Marcl
27.02.2006, 14:29
wäre möglich allerdings ist das von nem Kollegen und ich weiß nicht wer der dazu steht...der ist jetzt auch im Urlaub aber ich schicke dir das wenn der kein Problem damit hat

heady
27.02.2006, 15:20
ja sonst programmier ich es mir halt selber aus...i habe sowieso fast keine ahnung von perl...
vorher noch eine frage, wie lest du die mp3 tags aus?

Wolfgang
27.02.2006, 15:58
Hallo
Ich denke eher, dass das ein Problem des Zeichensatzes der Datenbank ist.
Um welchen Zeichensatz geht es denn überhaupt?
Gegebenenfalls muss der Client diesen eben in den verwendeten eigenen übersetzen.
Du kannst aber unter perl zwar auch einen vordefinierten erzwingen, was dann aber natürlich von der Datenbank unterstützt werden muss.
Sonst kommt übler Salat hinten raus.

Beispielsweise könntest zu vorweg ein Statement dieser Art:
"SET NAMES utf8"
an die DB absetzen.

Aber was du wo verwenden musst, hängt von vielen Faktoren ab.

Dateinamen umbenennen (Bereinigen) ist eine relativ leichte Übung -> wenn du schreibenden Zugriff auf die Dateien hast.


Für das Lesen von mp3-Tags gibt es Module.
Z.B. das MP3::Tag (http://search.cpan.org/author/ILYAZ/MP3-Tag-0.9706/Tag.pm)


Gruß Wolfgang

Marcl
27.02.2006, 17:55
Das eigentliche Problem ist nur das der die Info wo die Datei liegt die der sich aus dem Dateisystem zieht halt nicht mit Umlauten macht sondern halt mit den Sonderzeichen.
Alle anderen Einträge in der Datenbank sind in Ordnung. Das ist leider das blöde...

Wolfgang
27.02.2006, 18:16
Hallo
Also ohne Codezeilen kann ich nicht helfen, da meine Glaskugel heute sehr trübe ist. ;)

Die Frage steht auch, ob die Datenbank überhaupt diese Umlaute im verwendeten Zeichensatz versteht, oder ob sie sogar von der DB in Hexcode übersetzt werden.
Umlaut ist nicht gleich Umlaut!

Du schreibst auch nicht welche DB du verwendest.
Da aus deinem anderen (Doppel) Posting hevorgeht, dass du mittels CYGWIN an die Daten kommen willst, steht auch dort die Frage:
Welche CP verwendest du dort?

Es scheint wohl mehr ein Problem des Client bzw der DB zu sein.

Gruß Wolfgang
PS Da das Script nicht von dir ist, würde ich den beim Author nachfragen, bzw. diesen auf das Problem hinweisen.

Marcl
27.02.2006, 19:15
Hei.
Werde mal mit dem Autor sprechen bei dem funktioniert es auch mit Umlauten.
Ich denke mal der wird da wohl ne Antwort haben.

Aber eine Frage habe ich noch.
Ist möglich durch ein Script in einer MYSQL DB in einer bestimmten Tabelle in einem Feld alle Datensätze zu durchsuchen und in diesen dann die Sonderzeichen wieder in Umlaute zu ändern?
Da ich noch nicht wirklich Perl kann bin ich da etwas verloren.

Gruß Marcel

heady
27.02.2006, 20:00
im prinzip must du alle einträge suchen und daraus in sql ein update machen
(eh schon wissen: update tabelle set feld=....)
aber ich glaub im prinzip müsste es auch alleine durch die sql sprache evtl. gehen oder nicht?
was meinen die anderen dazu?

nic
27.02.2006, 20:10
Hab jetzt mit SQL rein garnix am Hut, aber ein kurzer google zeigt, dass man beispielsweise ohne weiteres RegEx-Support per UDF einbringen kann:
Bringing the Power of Regular Expression Matching to SQL (http://www-128.ibm.com/developerworks/db2/library/techarticle/0301stolze/0301stolze.html).

Wolfgang
27.02.2006, 20:12
Hei.
Werde mal mit dem Autor sprechen bei dem funktioniert es auch mit Umlauten.
Ich denke mal der wird da wohl ne Antwort haben.

Aber eine Frage habe ich noch.
Ist möglich durch ein Script in einer MYSQL DB in einer bestimmten Tabelle in einem Feld alle Datensätze zu durchsuchen und in diesen dann die Sonderzeichen wieder in Umlaute zu ändern?
Da ich noch nicht wirklich Perl kann bin ich da etwas verloren.

Gruß Marcel
Hallo
Deine Frage ist eine MySQL-Frage, hat mit perl wenig zu tun.

Du kannst sowas natürlich via mysql selbst erledigen.
Natürlich kannst du auch ein Perlscript verwenden.
Entscheidend dabei ist aber auch hier welchen Zeichensatz du verwendest.
Du könntest es mit utf8, ISO-8859-1, ISO-8859-15, CP1252(Windows)... konvertieren.
Abhängig ist das auch von der DB, und mit welchen Optionen diese kompiliert ist, bzw. welche dort verwendet werden.
Wichtig ist doch nur:
Du musst wissen, welche Zeichencodierung auf dem Zielsystem verwendet wird. und welchen Zeichencode perl beim Füttern der DB bekommt/erwartet.
Dann ist es wahrscheinlich einfacher, beim Ausgeben der Daten diese in das erwartete Format zu codieren.

Wenn perl selbst diesen Code erzeugt, (ich bin mir da nichtmahl sicher ob es nicht erst in der DB passiert) dann liest du unter Umständen von einem Datenträger, der von einem anderen System mit inkompatiblen Zeichencode beschrieben wurde.

Bei Windows-Partitionen lässt sich beispielsweise sowas aber schon beim Mounten ausbügeln.
Damit würde sich das Problem nämlich nicht mehr stellen.

Evetuell ist ja darüber eine schnelle Lösung möglich.

Gruß Wolfgang

Marcl
02.03.2006, 00:14
Also ich habe hier jetzt auch nochmal so rumgeschaut und gerätselt..
Wenn ich über die cygwin shell nen ssh mache und mir die Verz. Struktur anschaue sind die Umlaute auch als Sonderzeichen gesetzt.
Wenn ichs über Cygwin ausm x Anschaue sind die Umlaute ausgeschrieben halt so wies im Windoof auch is.
Übern Putty werden die auch korrekt ausgegeben.

In der DB sind die Titel etc. auch korrekt (Märchenland,...), nur sobald es in der selben DB um die Pfade zu den Dateien geht sind in der Verzeichnisstruktur und im Dateinamen alle durch Sonderzeichen ersetzt was natürlich der Winclient mal garnicht versteht. Das muss sich ja im Vorfeld regeln lassen das dieses funzt.
In dem Script werden die Bibliotheken MP3:Info, MP3:Tag von externen verwendet und das Script zur SQL beschickung und das für die Files ansich sind vom meinem Bekannten.
Ich werde Ihn einfach nocheinmal fragen was das ist und wenn ihm das recht ist werde ich das script auch zum DL hier reinstellen das es doch eine sehr einfache Lösung ist. Zumal er einen Winclient dazu erstellt. Nur halt nen fremden Source ins Netz stellen ohne zu fragen...würde mir auch net passen...
Vielleicht liegts an den Biblios die ich installiert habe weil ich mir die selbst runtergeladen habe und ich nicht 100% sagen kann ob es die gleich sind.


Gruß Marcel

Wolfgang
02.03.2006, 12:12
Hallo

Du hast schon meine Hinweise zu den Zeichencodierungen gelesen?

Keiner hat dich aufgefordert das zum Download anzubieten. Ich wüsste damit z.B. nix anzufangen.
Es ging lediglich darum die relevanten Codezeilen zu posten.

Wie es ausschaut, ist dein Problem aber weniger das Perlscript, als vielmehr die verwendeten Zeichencodierungen.

Was den Linux-Part betrifft: Schau dir mal die verwendeten locale an. Wenn du die Pfade aus einer Windowspartition liest, schau dir mal die Mountoptionen an.

Was den Cygwin-part betrifft: Erkundige dich in einschlägigen Boards/Newsgroups für Windows/Cygwin wie sowas geht, hat ja nix mit Linux zu tun.

Gruß Wolfgang