Імена файлів Unicode у Windows та Mac OS X


1

Я намагався використовувати пару систем синхронізації файлів Windows (Microsoft SyncToy, FreeFileSync) для синхронізації між двома папками: локальну папку Windows і папку OS X, встановлену на машині Windows за допомогою WebDAV. Однак синхронізація не працювала дуже добре: коли назву файлу використовувалися незвичайні символи (акценти, китайські літери ...), програма не виявила його як той самий файл і спробувала скопіювати її двома способами: спочатку з Windows вікна на OS X один, а потім в іншу сторону. В основному, він розглядав 2 копії файлу як абсолютно різні.

Це змусило мене задуматися: які саме варіанти між Unicode використовуються для назв файлів в OS X і Windows? (Я вважаю, що всі вони зараз підтримують Unicode). Що можна зробити, щоб запобігти несумісності цього типу?

Дві машини використовують Windows 7 SP 1 і OS X 10.9.5.

Відповіді:


2

Windows використовує UTF-16. Більшість кодових точок кодуються двома байтами. Кодові точки поза BMP (Basic Multilingual Plane) кодують у "сурогатній парі", яка займає чотири байти. Windows не нормалізує імена файлів, використовуючи будь-яку форму нормалізації Юнікоду.

Це означає, що ви можете мати два імена файлів, які виглядають однаково з одним, використовуючи прекомпонентний "é", що складається з однієї кодової точки, а інший, використовуючи звичайний ASCII "e", за яким комбінується гострий акцент Unicode, тобто дві кодові точки.

OS X використовує UTF-8. Кодові точки кодуються між одним і п'ятьма байтами. OS X використовує Unicode NFD (Normalization Form Canonical Decomposition).

Це означає, що коли в назві файлу використовується символ Unicode, наприклад "é", він завжди буде нормалізований системою в звичайний ASCII "e", за яким слідує Unicode, що об'єднує гострий акцент, і завжди буде брати два коди.

Насправді OS X використовує специфікацію Unicode NFD з версії Unicode 2.1 або 3.2, залежно від версії OS X.

Ось хороша сторінка, яка охоплює тонкощі в кодуванні файлу OS X / HFS +.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.