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.
Antwort auf Nein. von Jojo-Schmitz
Allerdings ist es möglich, unter Linux Dateinamen mit Umlauten abzuspeichern. Lassen sich diese in anderen Betriebssystemen nicht öffnen?
Antwort auf Allerdings ist es möglich,… von kuwitt
Das sind dann vermutlich Unicode Umlaute, die unter Windows aber wohl nicht, sondern irgendeine Codepage
Antwort auf Das sind dann vermutlich… von 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?
Antwort auf Überfordere mich doch nicht… von 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.
Antwort auf Kann man nicht die… von 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….
Antwort auf Als ebenso-Linuxnutzer hab… von 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
Antwort auf liegt der Grund darin… von 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 ;-).
Antwort auf liegt der Grund darin… von tuxan
Da haben wir dem Salat...
Antwort auf Nein. von 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.
Antwort auf Das Windows im Zeitalter von… von 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.
Antwort auf Der Code in MuseScore ändert… von Jojo-Schmitz
Unter Linux ändert MuseSore die Umlaute eben nicht beim erstmaligen Abspeichern nach Erstellung einer neuen Partitur - mittlerweile zweimal getestet.
Antwort auf Unter Linux ändert MuseSore… von 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
Antwort auf Dann muss ich mir den Code… von Jojo-Schmitz
An zig Stellen benutzt, nirgends plattformspezifisch.
Antwort auf //--------------------------… von Jojo-Schmitz
Antwort auf [inline:Umlaute.png] von 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.
Antwort auf Logisch. Der oben gezeigte… von tuxan
ich kann an
0xe4
für ä nix plattformspezifisches erkennenVersuche das auch mal mit : * ? oder \
Antwort auf ich kann an 0xe4 für ä nix… von 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.
Antwort auf Mein Fehler. Sehe gerade:… von 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
Antwort auf Der Code kommt immer zum… von 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.
Antwort auf Ich stehe gerade aufm… von tuxan
Hier bei mir unter Windows (7, ja ich weiss...) funktioniert es jedenfalls
Antwort auf ich kann an 0xe4 für ä nix… von 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.
Antwort auf Auch Zeichen wie * ,? oder \… von 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.
Antwort auf Ja, unter Linix. Eine solche… von Jojo-Schmitz
Angehängte Datei lässt sich unter Windows nicht öffnen?
Antwort auf Angehängte Datei lässt sich… von kuwitt
Sie lässt sich erst garnicht abspeichern (ohne das ? duch _ zu ersetzen
Antwort auf Ja, unter Linix. Eine solche… von Jojo-Schmitz
...der von MuseScore vorgeschlagene Dateiname, basierend auf dem Titel der Partitur, wird diese aber nicht beinhalten.
Tut er aber.
Antwort auf ...der von MuseScore… von kuwitt
Bei mir nicht. Neue Partitur, Titel "FooBar:\?", Speichern, vorgeslagener Dateiname "FooBar___.mscz"
Antwort auf Bei mir nicht. Neue Partitur… von 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.
Antwort auf Was ist im Code denn die… von 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.
Antwort auf Was ist im Code denn die… von 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
Antwort auf Immer. von Jojo-Schmitz
Was sagen denn unsere tschechischen Benutzer, wenn aus einem ů plötzlich ein oe wird?
Antwort auf Was sagen denn unsere… von tuxan
Wird es nicht, das dieses Zeichen nicht ersetzt wird
Antwort auf Was ist im Code denn die… von 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.
Antwort auf Wobei, es geht um der Zeile:… von tuxan
Gesunde funktionierende Voreinstellungen sind was feines
Antwort auf Wobei, es geht um der Zeile:… von tuxan
Die Zeichen / : * ? " < > und| werden durch _ ersetzt
Antwort auf Die Zeichen / : * ? " < >… von 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?
Antwort auf Habe da gerade zufällig… von 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.
Antwort auf Tatsächlich. Auf die Idee,… von 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.