UTF 8 Dateinamen?

14

Sind in Unix-basierten Betriebssystemen UTF6-Dateinamen zulässig? In diesem Fall muss ich etwas Besonderes tun, um die Datei auf die Festplatte zu schreiben.

Lassen Sie mich erklären, was ich zu tun hoffe. Ich schreibe eine Anwendung, die eine Datei über FTP auf ein fernes System überträgt, aber der Dateiname wird dynamisch über einen Metadatensatz festgelegt, der möglicherweise in utf8 enthalten ist. Ich frage mich, ob ich etwas tun muss, um die Datei unter Unix / Linux auf die Festplatte zu schreiben.

Weiß jemand im Nachhinein, was passieren würde, wenn ich einen UTF 8-Dateinamen auf ein System hochlade, das UTF8 nicht unterstützt?

Mark D
quelle

Antworten:

19

Unter Unix / Linux ist ein Dateiname eine Folge von Bytes mit Ausnahme eines Schrägstrichs oder einer NUL. Ein Schrägstrich trennt Pfadkomponenten und eine NUL beendet einen Pfadnamen.

Sie können also die gewünschte Kodierung für Dateinamen verwenden. Einige Anwendungen haben möglicherweise Probleme mit einigen Codierungen, wenn sie nicht genau wissen, welche Zeichen in Dateinamen enthalten sind. In schlecht geschriebenen Shell-Skripten werden beispielsweise Dateinamen häufig nicht mit Leerzeichen behandelt.

Moderne Unix / Linux-Umgebungen verarbeiten UTF-8-codierte Dateinamen einwandfrei.

camh
quelle
11

Intern speichern die meisten Dateisysteme Bytes: Dem Dateisystemtreiber ist es egal, was die Bytes bedeuten. Der generische Dateisystemtreiber unter Linux und den meisten anderen modernen Betriebssystemen lässt /zu, dass in einem Dateinamen ein anderes Byte als und das Null-Byte vorkommt.

Es gibt Dateisysteme, für die möglicherweise Codierungsbeschränkungen gelten - normalerweise nicht native Dateisysteme wie FAT oder NTFS. Einige Netzwerk-Dateisysteme wie Samba können zwischen der Server-Codierung und der Client-Codierung konvertieren. Sie müssen sicherstellen, dass die Server- und Clientkonfigurationen kohärent sind.

Herkömmlicherweise werden auf den meisten Systemen die Bytes, aus denen ein Dateiname besteht, als UTF-8 interpretiert. Wenn Sie eine Anwendung ausführen, die die Dateinamen als Zeichen interpretiert, z. B. eine Anwendung, die die Namen über FTP überträgt, müssen Sie diese Anwendung möglicherweise so konfigurieren, dass sie mitteilt, dass Ihre Dateinamen in UTF-8 codiert sind. Das Festlegen der Umgebung LC_CTYPEauf ein UTF-8-Gebietsschema en_US.UTF-8ist für viele Befehlszeilenanwendungen der Trick.

Wenn Sie Dateien auf einem System speichern, das UTF-8 nicht unterstützt, spielt dies keine Rolle. Die Bytes bleiben gleich. Sie können die Zeichen, aus denen die Dateinamen bestehen, nicht anzeigen. Wenn Sie die Dateien jedoch zurück auf ein System kopieren, das UTF-8 unterstützt, werden dieselben Bytes weiterhin als UTF-8-Zeichen angezeigt.

Wenn Sie Ihre eigene Anwendung schreiben, ist es eine gute Idee, UTF-8 intern und nach Möglichkeit für die Speicherung und Übertragung zu verwenden.

Gilles 'SO - hör auf böse zu sein'
quelle