Es fällt mir schwer zu verstehen, wie die Dateinamencodierung funktioniert. Auf unix.SE finde ich widersprüchliche Erklärungen.
Dateinamen werden als Zeichen gespeichert
Um eine andere Antwort zu zitieren: Mehrere Fragen zur Zeichencodierung im Dateisystem unter Linux
[…] Wie Sie in Ihrer Frage erwähnt haben, besteht ein UNIX-Dateiname nur aus einer Folge von Zeichen. Der Kernel weiß nichts über die Kodierung, die ein Konzept auf Benutzerbereichs- (dh Anwendungsebene) ist.
Wenn Dateinamen als Zeichen gespeichert werden, muss eine Art Codierung erforderlich sein, da der Dateiname schließlich als Bit- oder Byte-Sequenz auf der Festplatte gespeichert werden muss. Wenn der Benutzer eine Codierung auswählen kann , um die Zeichen einer Bytefolge zuzuordnen, die dem Kernel zugeführt wird, kann eine beliebige Bytefolge für einen gültigen Dateinamen erstellt werden.
Angenommen, ein Benutzer verwendet eine zufällige Codierung X , die die Datei foo
in die Bytefolge α übersetzt und auf der Festplatte speichert. Ein anderer Benutzer Verwendungen kodierend Y . Bei dieser Kodierung wird α übersetzt /
, was als Dateiname nicht erlaubt ist. Für den ersten Benutzer ist die Datei jedoch gültig.
Ich gehe davon aus, dass dieses Szenario nicht passieren kann.
Dateinamen werden als binäre Blobs gespeichert
Um eine andere Antwort zu zitieren: Welche Zeichensatzkodierung wird für Dateinamen und Pfade unter Linux verwendet?
Wie von anderen bemerkt, gibt es keine wirkliche Antwort darauf: Dateinamen und Pfade haben keine Kodierung; Das Betriebssystem behandelt nur die Reihenfolge der Bytes. Einzelne Anwendungen interpretieren sie möglicherweise so, dass sie auf irgendeine Weise codiert sind. Dies ist jedoch unterschiedlich.
Wenn das System keine Zeichen verarbeitet, wie können bestimmte Zeichen (z. B. /
oder NULL
) in Dateinamen verboten werden? Es gibt keine Vorstellung von einem /
ohne Kodierung.
Eine Erklärung wäre, dass das Dateisystem Dateinamen speichern kann, die beliebige
Zeichen enthalten, und dass nur die Benutzerprogramme, die eine Kodierung berücksichtigen, Dateinamen mit ungültigen Zeichen verschlüsseln würden. Dies bedeutet wiederum, dass Dateisysteme und der Kernel problemlos mit Dateinamen umgehen können, die a enthalten /
.
Ich gehe auch davon aus, dass dies falsch ist.
Wo findet die Codierung statt und wo besteht die Einschränkung, bestimmte Zeichen nicht zuzulassen?