Kommt es darauf an, welches Dateisystem ich benutze? Zum Beispiel ext2 / ext3 / ext4, aber was passiert auch, wenn ich eine dieser "Joliet" -CD-ROMs mit ISO 9660 einlege? Ich habe gehört, dass POSIX irgendeine Spezifikation für die Zeichensatzkodierung von Dateinamen enthält.
Ich frage mich im Wesentlichen, ob ich einen UTF-8-codierten Dateinamen habe, welche Verarbeitung / Abdeckung muss ich vornehmen, bevor ich ihn an eine Datei-E / A-API in Linux übergebe?
filenames
character-encoding
locale
martin
quelle
quelle
Antworten:
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 in irgendeiner Weise codiert sind. Dies ist jedoch unterschiedlich.
Insbesondere geht Glib (von Gtk + Apps verwendet) davon aus, dass alle Dateinamen unabhängig vom Gebietsschema des Benutzers UTF-8-codiert sind . Dies kann mit den Umgebungsvariablen G_FILENAME_ENCODING und G_BROKEN_FILENAMES überschrieben werden .
Andererseits geht Qt standardmäßig davon aus, dass alle Dateinamen im Gebietsschema des aktuellen Benutzers codiert sind . Eine einzelne Anwendung kann diese Annahme außer Kraft setzen, obwohl mir keine bekannt ist und es keinen externen Override-Schalter gibt.
Moderne Linux-Distributionen sind so eingerichtet, dass alle Benutzer UTF-8-Gebietsschemas verwenden und Pfade auf fremden Dateisystem-Mounts in UTF-8 übersetzt werden, sodass dieser Unterschied in den Strategien im Allgemeinen keine Auswirkungen hat. Wenn Sie jedoch wirklich sicher sein möchten, können Sie keine Struktur für Dateinamen über "NUL-terminierte, '/' - begrenzte Folge von Bytes" hinaus annehmen.
(Beachten Sie auch, dass das Gebietsschema prozessabhängig sein kann. Zwei unterschiedliche Prozesse, die vom selben Benutzer ausgeführt werden, befinden sich möglicherweise in unterschiedlichen Gebietsschemata, indem einfach unterschiedliche Umgebungsvariablen festgelegt werden.)
quelle
'\x2F'
egal wie es aussieht/
. Bemerkenswert anders in SJIS.Der Unix / Posix-Ebene von Linux ist es egal, welche Codierung Sie verwenden. Es speichert die Bytesequenz Ihrer aktuellen Kodierung wie sie ist.
Ich denke, diese Mount-Optionen helfen Ihnen dabei, bestimmte Dateisysteme, die einen Zeichensatz definieren, in Ihren Systemzeichensatz zu konvertieren. (CD-ROMs, NTFS und die FAT-Varianten verwenden einige Unicode-Varianten).
Ich wünschte, Unix definiert ein globales System-Codierung, aber es ist eigentlich eine Einstellung pro Benutzer. Wenn Sie also eine andere Codierung als Ihren Kollegen definieren, werden Ihre Dateinamen anders angezeigt.
quelle
Es hängt davon ab, wie Sie das Dateisystem bereitstellen. Schauen Sie sich lediglich die Bereitstellungsoptionen für verschiedene Dateisysteme in an
man mount
. Zum Beispieliso9660
,vfat
undfat
habeniocharset
undutf8
Optionen.quelle