Leerzeichen, Umlaute und ß in Dateinamen beim ersten Speichern
Beim ersten Speicher einer Partitur übernimmt MuseScore den Dateinamen aus dem Titel der Partitur. Das ist ok. Jedoch werden dabei Leerzeichen in Unterstriche, Umlaute in 'ae', 'oe' bzw. 'ue' und 'ß' in 'ss' umgewandelt. Dies war notwendig bei Uraltversionen von MS-DOS und Windows 3.11, wo diese Zeichen nicht in Dateinamen verwendet werden durften. Um sie zu übernehmen, muss beim Speichern die Zeile mit dem Dateinahmen mühsam editiert werden. Das nervt!
Gibt es eine Möglichkeit, diese unnötigen Umwandlungen abzuschalten?
Comments
Mmh, entweder hast Du die Spracheinstellungen in Windows auf etwas geändert, was die deutschen Zeichen nicht enthält oder Du hast unter Bearbeiten -> Einstellungen -> Sprache etwas falsches eingestellt (bei mir steht System).
Nachtrag: Die Spracheinstellungen in Musescore sind natürlich für die Oberfläche von Musescore. Aber evtl. hängt das damit zusammen. Evtl. ist das Verhalten so, wenn man Englisch oder so auswählt.
Nein. Auch heute noch verwendet Windows kein Unicode für Dateinamen und es kommt daher zu Problemen wenn man Dateien mit solchen Namen mit anderen Plattformen wie macOS oder Linux austauschen will.
In reply to Nein. by Jojo-Schmitz
Allerdings ist es möglich, unter Linux Dateinamen mit Umlauten abzuspeichern. Lassen sich diese in anderen Betriebssystemen nicht öffnen?
In reply to Allerdings ist es möglich,… by kuwitt
Das sind dann vermutlich Unicode Umlaute, die unter Windows aber wohl nicht, sondern irgendeine Codepage
In reply to Das sind dann vermutlich… by Jojo-Schmitz
Überfordere mich doch nicht mit solchen Begrifflichkeiten, ich bin doch kein "Coder", sondern nur ein ganz gewöhnlicher Mensch, der in der Menge untergeht ;-). Vermutlich habe ich zu wenig Ahnung darüber, aber mein Gedanke hierzu: Kann man nicht die Zeichenkodierung in jedem Betriebssystem irgendwo einstellen?
In reply to Überfordere mich doch nicht… by kuwitt
Kann man nicht die Zeichenkodierung in jedem Betriebssystem irgendwo einstellen?
Inzwischen sicherlich. Aber man kann es von unhandlich, unflexible und undurchsichtig bis einfach und elegant machen.
Beim OP irritiert mich, das er den Dateinamen per Hand auf mit Umlauten und Leerzeichen abändert und abspeichert.
Unter Linux würde ich fragen: Wie verhält sich Musescore, wenn Du es so aufrufst:
export LANG=de_DE;UTF-8;/usr/bin/mscore
So, habe mal getestet mit folgendem Aufruf:
export LANG="en_GB.US-ASCII";/usr/bin/mscore -a alsa
Auch da bietet mir Musescore die Umlaute aus dem Titel im Dateinamen an.
Mir fällt dazu erstmal nichts weiter ein.
Edit: Ähm, wieso konnte ich da Umlaute eingeben? MS verwaltet wohl intern UTF-8.
In reply to Kann man nicht die… by tuxan
Als ebenso-Linuxnutzer hab ich keinen wirklichen Plan, liegt der Grund darin vielleicht, dass MuseScore unter Windows nicht mit der UTF-8 Kodierung klarzukommen scheint? Auch das WWW überfordert mich aus der Ferne diesbezüglich. Word scheint demnach z.B. eine Einstellung zu haben, die Kodierung auszuwählen: https://praxistipps.chip.de/ms-office-word-utf-8-kodierung-einstellen_3….
In reply to Als ebenso-Linuxnutzer hab… by kuwitt
liegt der Grund darin vielleicht, dass MuseScore unter Windows nicht mit der UTF-8 Kodierung klarzukommen scheint?
Ich vermute, das MuseScore intern eh sein eigenes Ding macht (deswegen werden die auch ihre Schriftdateien fest einkompiliert haben). Das Problem liegt da wohl eher zwischen Qt und Windows (mit Windows als Störenfried).
Auch das WWW überfordert mich aus der Ferne diesbezüglich.
Das liegt an die Webseitenbetreiber, die immer noch denken, das die Metaangabe im HTML hat was mit dem den zu verwendenden Zeichensatz zu tun. Die auszugebenden Dateien müssen mit den Server-Header-Angaben übereinstimmen. Sprich, es muß der passende Header zur Datei gesendet werden.
_Word scheint demnach z.B. eine Einstellung zu haben, die Kodierung auszuwählen: _
Da Du nur Word schreibst, meinst Du sicherlich das Ungemach aus dem Hause M$. Wenn ich nicht noch ein paar Tastenkürzel aus dem letzten Jahrtausend wüßte, wüßte ich nicht, wie ich das bedienen soll. Wenn mein Glück anhält, brauche ich das auch nie wieder zu nutzen.
Unter W10 gibt es die Möglichkeit, auf UTF-8 umzustellen, ist aber als Beta markiert. Und inwieweit sich das auswirkt, kann ich nicht beurteilen.
Habe hier den umgekehrten Weg (UTF-8 deaktivieren) gefunden, aber der Weg ist der gleiche:
https://www.commusic.de/hilfe/module_2_5_38_print.html
In reply to liegt der Grund darin… by tuxan
Da Du nur Word schreibst, meinst Du sicherlich das Ungemach aus dem Hause M$. Wenn ich nicht noch ein paar Tastenkürzel aus dem letzten Jahrtausend wüßte, wüßte ich nicht, wie ich das bedienen soll.
Ist nur auf Arbeit vonnöten, schon lange nicht mehr privat ;-).
In reply to liegt der Grund darin… by tuxan
Da haben wir dem Salat...
In reply to Nein. by Jojo-Schmitz
Das Windows im Zeitalter von UTF-8/16/32 noch mit Codepages rumhantiert, glaube ich gern, da es mein Bild von dieser Firma bestärkt.
Um es zu testen hatte ich extra ein aktuelles W10 mit MS3.5 gestartet. Eine neue Partitur mit "schönen und übelmäßigem" Titel angelegt und mir wurde der Dateiname incl. der Leerzeichen genauso zum speichern angeboten.
Darum vermute ich, daß das Gebietsschema (so heißt das wohl) auf etwas nicht deutschsprachiges gestellt und deswegen anders angeboten wurde. Erklärt allerdings die Unterstriche für die Leerzeichen nicht.
Muß morgen diesbezüglich einmal testen, da ich hin und wieder Dateien zwischen W10 und Linux (auch UTF-8-Textdateien, diese allerdings über eine Versionsverwaltung und Notepad++ kann, wenn ich mich recht entsinne, auch UTF-8) austausche und mir jetzt nicht bewußt bin, das ich seit W10 Probleme damit hatte. Allerdings verwende ich außer den Dateimanager auch kein produktives Programm aus dem Hause Microsoft.
In reply to Das Windows im Zeitalter von… by tuxan
Der Code in MuseScore ändert Umlaute etc unabhängig von Betriebssystem oder Einstellungen, kann aber überschrieben werden, dann erzeugt es die Dateinamen aber gemäß des jeweiligen Betriebssystems, Dateisystems und Einstellungen.
In reply to Der Code in MuseScore ändert… by Jojo-Schmitz
Unter Linux ändert MuseSore die Umlaute eben nicht beim erstmaligen Abspeichern nach Erstellung einer neuen Partitur - mittlerweile zweimal getestet.
In reply to Unter Linux ändert MuseSore… by kuwitt
Dann muss ich mir den Code nochmal genauer ansehen, möglich, dass das doch Windows spezifisch ist. Auch gut möglich dass das noch aus XP Zeiten stammt und bei 10 nicht mehr nötig ist, wie das bei 7, 8 und 8.1 aussieht müsste man dann ebenfalls rausfinden
In reply to Dann muss ich mir den Code… by Jojo-Schmitz
An zig Stellen benutzt, nirgends plattformspezifisch.
In reply to //--------------------------… by Jojo-Schmitz
In reply to [inline:Umlaute.png] by kuwitt
Logisch. Der oben gezeigte Code frißt unter Linux nur Laufzeit ohne irgendwas zu ersetzen. Damit da Ersetzungen rauskommen muß man Linux schon darauf prügeln, was man nicht will. ;-)
So wie der Code geschrieben ist, ist er schon mehr oder weniger plattformabhängig. Allerdings ist er auch böse. Da müßte man mal ein paar Polen, Tschechen, Slowener, ... fragen, bei denen der Code Ersetzungen vornimmt.
In reply to Logisch. Der oben gezeigte… by tuxan
ich kann an
0xe4
für ä nix plattformspezifisches erkennenVersuche das auch mal mit : * ? oder \
In reply to ich kann an 0xe4 für ä nix… by Jojo-Schmitz
Mein Fehler. Sehe gerade: keycode 48 (keysym 0xe4, adiaeresis).
Ich vermute, der obige Code ist schon länger drin und wurde als Schnellhack von einem deutschen Programmierer eingebracht.
Mir schwand da was. Das ist böser Code. Ist die Frage, wann er aufgerufen wird. Kommt er nur zur Anwendung, wenn die Spracheinstellung de_DE ist kann man ein Auge zudrücken, bei de_DE;UTF-8 ist der Code schon wieder sehr böse. Kommt der Code unabhängig von den Spracheinstellungen zum Einsatz (was ich nicht glaube, weil es sonst viele bitterböse Forumseinträge außerhalb des deutschen Forumteils gäbe), dann ist der Code oberböse.
Wird die Zeichenkette, die als Dateiname verwendet werden soll mit dem Code behandelt, dann ist der Code sinnlos, da der keysym nicht in der Zeichenkette erhalten ist.
Wenn man die Beschränktheiten des Filesystems umgehen will, einfach einen neutralen Dateinamen vorgeben.
In reply to Mein Fehler. Sehe gerade:… by tuxan
Der Code kommt immer zum Tragen wenn ein Dateiname aus Temperatur Titel einer Partitur generiert wird.
Und ja, der ist schon sehr lange drin, sein mehr als 8 Jahren, 412ca454 hatte es bereits, der alleresrte Gig(Hib) commit (dem Begin der MuseScore 2 Entwicklung), der Code stammt wohl aber schon aus MuseScore 1
In reply to Der Code kommt immer zum… by Jojo-Schmitz
Ich stehe gerade aufm Schlauch. Meiner Meinung nach kann und konnte der Code im Gebrauch mit dem generieren des Dateinamens nicht funktionieren bzw. funktioniert haben.
Der Code wandelt Tastatureingaben (keysym - sprachunabhängig). Die entstandene Zeichenkette steht in Variable $TITLE.
Beispiel: Ich drücke auf der Tastatur mit deutschem Layout die Taste ä, es wird der keysym 0xe4 übergeben. Dann wird je nach verwendeter Sprache der keysym 0xe4 in (einfachheitshalber 8-Bit-ASCII) ASCII 132d 0x84h und mit deutscher Charmap ä. Also müßte der Code so ausehen:
fn = fn.replace(QChar(0x84), "ae"); // auch böse
richtiger wäre s/ä/ae/
Der gepostete Code funktioniert nur, wenn die Tastatureingabe abgefangen würde ersetzt und dann in den String geschrieben würde.
Das das aber beim OP zuschlägt ist mir ein Rätsel.
Kann aber auch sein, das ich wieder etwas durcheinanderschmeiße. C/C++/Qt kann ich zwar halbwegs lesen aber schreiben tue ich in anderen Sprachen.
In reply to Ich stehe gerade aufm… by tuxan
Hier bei mir unter Windows (7, ja ich weiss...) funktioniert es jedenfalls
In reply to ich kann an 0xe4 für ä nix… by Jojo-Schmitz
Auch Zeichen wie * ,? oder \ werden unter Linux eins zu eins abgespeichert und lassen sich Partituren mit solchen Zeichen im Dateinamen problemlos wieder öffnen.
Ich hoffe, diesbezüglich wird auch nichts am Code geändert, hab damit noch nie Probleme gehabt.
In reply to Auch Zeichen wie * ,? oder \… by kuwitt
Ja, unter Linux, vermutlich auch unter macOS. Eine solche Datei lässt sich aber nicht zu Windows transferieren.
Du kannst jedes beliebige Zeichen in Dateinamen verwenden (In POSIX alles ausser '/' in '\0'), der von MuseScore vorgeschlagene Dateiname, basierend auf dem Titel der Partitur, wird diese aber nicht beinhalten.
In reply to Ja, unter Linix. Eine solche… by Jojo-Schmitz
Angehängte Datei lässt sich unter Windows nicht öffnen?
In reply to Angehängte Datei lässt sich… by kuwitt
Sie lässt sich erst garnicht abspeichern (ohne das ? duch _ zu ersetzen
In reply to Ja, unter Linix. Eine solche… by Jojo-Schmitz
...der von MuseScore vorgeschlagene Dateiname, basierend auf dem Titel der Partitur, wird diese aber nicht beinhalten.
Tut er aber.
In reply to ...der von MuseScore… by kuwitt
Bei mir nicht. Neue Partitur, Titel "FooBar:\?", Speichern, vorgeslagener Dateiname "FooBar___.mscz"
In reply to Bei mir nicht. Neue Partitur… by Jojo-Schmitz
Was ist im Code denn die Bedingung, das createDefaultFileName() aufgerufen wird?
Ergänzung: Der gepostete Code betrifft ja (hoffentlich) nur deutsche User.
@kuwitt: Laß mich raten, Du verwendest UTF-8, da hast Du 2 Byte für das '?', das kann der Code nicht.
In reply to Was ist im Code denn die… by tuxan
Ja, UTF-8, bin daher auch nicht wirklich böse, dass MuseScore mir nicht andere Dateinamen beim Speichern vorschlägt. Sollte es mal wirklich notwendig sein, kann ich diesen dann immer noch händig ändern.
In reply to Was ist im Code denn die… by tuxan
Was ist im Code denn die Bedingung, das createDefaultFileName() aufgerufen wird?
Immer
Der gepostete Code betrifft ja (hoffentlich) nur deutsche User.
Für alle User
In reply to Immer. by Jojo-Schmitz
Was sagen denn unsere tschechischen Benutzer, wenn aus einem ů plötzlich ein oe wird?
In reply to Was sagen denn unsere… by tuxan
Wird es nicht, das dieses Zeichen nicht ersetzt wird
In reply to Was ist im Code denn die… by tuxan
Wobei, es geht um der Zeile:
fn = fn.replace( QRegExp( "[" + QRegExp::escape( "\/:*?\"<>|" ) + "]" ), "_" ); //FAT/NTFS
Habe mal etwas getestet. Im Anhang ein Screenshot davon.
Bei A gibt es Probleme (wohl wegen der Interpretation des '/', weil das unmaskiert ein Pfadbestandteil ist). '<>|' halte ich unter Linux unmaskiert ebenfalls für kritisch, da I/O-Umleitungen.
Bei B wird er zwar angezeigt, läßt sich aber nicht speichern (klar, wenn man weiß was <> bewirkt).
Meiner Meinung nach ist das eh nicht sinnvoll. Das einzig wirklich brauchbare ist das Öffnen eines Fensters mit einem voreingestellten Pfad in dem man den Dateinamen einträgt. Wer das nicht vermag ist eh besser bedient, auf der Parkbank sitzend Vögel zu beobachten und schöngeistigen Dingen zu frönen.
In reply to Wobei, es geht um der Zeile:… by tuxan
Gesunde funktionierende Voreinstellungen sind was feines
In reply to Wobei, es geht um der Zeile:… by tuxan
Die Zeichen / : * ? " < > und| werden durch _ ersetzt
In reply to Die Zeichen / : * ? " < >… by Jojo-Schmitz
Ich weiß. Zumindest sagt das die Codezeile aus.
Bei meinem Screenshot unter A sieht man, das dem nicht so ist.
"Titel_\/:" wird irgendwie mit Pfadangaben oder so versucht zu interpretieren (ist wohl Linuxspezifisch),
der * wird übernommen und aus ?"<>| wird %3F%22%3C%3E%7C und der Rest wieder normal.
Ich vermute, die Slashs und der Doppelpunkt haben diese Ausgabe provoziert (Hint: URLs). Irgendetwas interpretiert da nochmal um.
Bei B hat er nichts ersetzt.
QChar(0x..) holt sich, wenn ich das jetzt richtig glaube, das Zeichen, was unter dem symkey gemappt ist und replace ersetzt bei true das Zeichen mit dem vorgegebenen String. Jetzt wird aber durch Verwendung von z.B. UTF-8 das Zeichen nochmal umgemappt und QChar liefert ein anderes Zeichen als im String liegt und dadurch kommt es nicht mehr zur Ersetzung. Unter Windows mit der Verwendung von Codepages scheint das zu funktionieren, mit xmodmap nicht mehr.
Kann aber auch sein, das ich QChar() mit der Wirkweise eines anderen Befehls verwechsle. Ist schon 15 - 20 Jahre her, wo ich mich damit rumgeschlagen habe, noch dazu in anderen Programmiersprachen.
Siehe auch https://musescore.org/en/node/309794, auch hier (sowie in #308694: Windows: Can't export to WAP, OGG, FLAC files with the path name that contains non-ASCII characters) führen nicht ASCII Zeichen zu Problemen, insbesondere unter Windows. Auch #287955: In Windows Explorer, files with special characters in filepath don't open when double-clicked
Auch https://musescore.org/en/node/309796 (gerade eben aufgetaucht)
Habe da gerade zufällig etwas Interessantes diesbezüglich entdeckt: Bei "Speichern als..." unterbleibt das Umwandeln sowohl von Leerzeichen als auch Umlauten. Ist doch interessant! Oder?
In reply to Habe da gerade zufällig… by Gianni_1947
Tatsächlich.
Auf die Idee, bei einer neu erstellten Datei auf 'Speichern' zu drücken kam ich nicht. Ich nutze wohl schon zu lange Computer.
Auch die Sonderzeichen "\/:*?\<>|" werden da ersetzt.
Jetzt verstehe ich auch den Gedanken hinter dem Code. Ich vermute, früher hat er gleich gespeichert, ohne den Dialog anzuzeigen und deswegen die unterschiedliche Behandlung zwischen "Speichern" und "Speichern unter".
@kuwitt: Du hast sicherlich genau wie ich immer "Speichern unter" verwendet.
In reply to Tatsächlich. Auf die Idee,… by tuxan
Korrekt ;-). Mit Strg+S findet tatsächlich auch hier die Ersetzung statt. Bei Sonderzeichen finde ich dies auch weniger störend (außer vielleicht bei "?" oder "&), bei Umlauten oder "ß" schon eher. Aber ist eher ästhetischer Natur und stört nicht wirklich den Arbeitsfluss.
Ich frage mich gerade, bei welchen Zeichen es immer noch Kompatibilitätsprobleme gibt - gefühlt musste man früher viel öfter Dateinamen umbenennen, um ein und dieselbe Datei auf verschiedenen Betriebssystemen zu nutzen - und wie andere Programme damit umgehen (z.B. "LibreOffice", "Gimp", "Scribus", "Inkscape",...), so dass es vielleicht eine bessere Lösung dafür gibt.