Unicode-Dateinamen in Windows vs. Mac OS X

1594
PaulJ

Ich habe versucht, ein paar Windows-Dateisynchronisierungsprogramme (Microsoft SyncToy, FreeFileSync) zu verwenden, um zwischen zwei Ordnern zu synchronisieren: einem lokalen Windows-Ordner und einem OS X-Ordner, der mithilfe von WebDAV auf dem Windows-Computer eingehängt ist. Die Synchronisierung funktionierte jedoch nicht besonders gut: Immer wenn ein Dateiname ungewöhnliche Zeichen (Akzente, chinesische Buchstaben ...) verwendete, erkannte das Programm sie nicht als dieselbe Datei und versuchte es auf zwei Arten zu kopieren: zuerst aus der Windows-Box zum OS X ein und dann in die andere Richtung. Grundsätzlich wurden die 2 Kopien der Datei als völlig unterschiedlich behandelt.

Das brachte mich zum Nachdenken: Was genau sind die Varianten zwischen dem Unicode, der für Dateinamen in OS X und Windows verwendet wird? (Ich nehme an, dass sie inzwischen alle Unicode unterstützen). Was kann man tun, um Inkompatibilitäten dieses Typs zu verhindern?

Die beiden Maschinen verwenden Windows 7 SP 1 und OS X 10.9.5.

1

1 Antwort auf die Frage

2
hippietrail

Windows verwendet UTF-16. Die meisten Codepunkte sind in zwei Bytes codiert. Codepoints außerhalb der BMP (Basic Multilingual Plane) codieren in einem "Ersatzpaar", das vier Byte benötigt. Windows normalisiert Dateinamen nicht mit einem Unicode-Normalisierungsformular.

Dies bedeutet, dass Sie zwei Dateinamen haben können, die identisch aussehen mit einem mit einem vordefinierten "é", das aus einem einzelnen Codepunkt besteht, und der andere mit einem regulären ASCII "e", gefolgt von einem Unicode, der akuten Akzent kombiniert, also zwei Codepunkte.

OS X verwendet UTF-8. Codepunkte werden mit einem bis fünf Bytes codiert. OS X verwendet Unicode NFD (Normalization Form Canonical Decomposition).

Das bedeutet, wenn ein Unicode-Zeichen wie "é" in einem Dateinamen verwendet wird, wird es vom System immer in ein reguläres ASCII-Zeichen "e", gefolgt von einem Unicode mit akutem Akzent, normalisiert und nimmt immer zwei Codepunkte an.

Tatsächlich verwendet OS X abhängig von der Version von OS X die Spezifikation von Unicode NFD entweder aus der Unicode-Version 2.1 oder 3.2.

Hier ist eine schöne Seite, die die Feinheiten in der Dateinamencodierung von OS X / HFS + behandelt.