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.

1 ответ1

2

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

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

OS X использует UTF-8. Кодовые точки кодируются с использованием от одного до пяти байтов. OS X использует Unicode NFD (форма нормализации канонического разложения).

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

Фактически OS X использует спецификацию Unicode NFD от Unicode версии 2.1 или 3.2, в зависимости от версии OS X.

Вот хорошая страница, которая охватывает тонкости в кодировке имени файла OS X's / HFS+.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .