Na powyższym zrzucie ekranu Finder próbuje uzyskać dostęp (przez SMB) do katalogu „1_ã" w folderze udostępnionym i utworzyć podfolder, co skutkuje błędem. Dzieje się tak, ponieważ znak „ã" jest zakodowany w postaci Normalization Form D (NFD), czyli formie normalizacji Unicode „Canonical Decomposition".
Po stronie klienta Finder wysyła jednak żądanie w postaci Normalization Form C (NFC), czyli formie „Canonical Composition". W związku z tym serwer NAS nie rozpoznaje nazwy katalogu ani nie może go odnaleźć, przez co zgłasza błąd.
Ta rozbieżność może również powodować, że niektóre pliki w folderach o nazwach zawierających litery z formy NFD stają się niewidoczne i niemożliwe do edycji. Operacje takie jak zmiana nazwy, tworzenie czy edycja plików w tego typu folderze mogą kończyć się niepowodzeniem.
Błąd ten wynika z faktu, że serwer i klient używają dwóch różnych form normalizacji Unicode. Gdy użytkownik próbuje uzyskać dostęp do folderu udostępnionego na serwerze NAS przez SMB, klient wysyła żądanie sprawdzenia, jakie pliki znajdują się w katalogu. Po otrzymaniu żądania serwer NAS przesyła klientowi wszystkie nazwy plików w katalogu. Problem pojawia się, gdy nazwy plików używają innej formy normalizacji Unicode – w tym przypadku NFD po stronie serwera i NFC po stronie klienta. Sytuacja ta zachodzi, gdy klient przy zapisywaniu plików na serwerze NAS wybiera inną formę. Gdy klient otrzymuje nazwy plików, żąda od serwera wyświetlenia tych plików lub utworzenia nowego pliku w katalogu. Format kodowania żądania zależy od ustawień po stronie klienta. Jeśli żądanie klienta ma inny format niż format używany na serwerze, serwer nie będzie w stanie odnaleźć plików ani katalogów i zgłosi błąd.
Jeśli chcesz przekonwertować nazwy plików z formy NFD na formę NFC dla plików przechowywanych na serwerze NAS, możesz użyć narzędzia o nazwie convmv. Postępuj zgodnie z poniższymi krokami, aby zainstalować convmv.
- Zaloguj się na serwer NAS i przejdź do App Center.
- Zainstaluj Perl.
- Przejdź do Index of /linux/convmv i pobierz convmv.
- Zapisz plik w katalogu na serwerze NAS (np. folder udostępniony, Public).
- Otwórz Terminal i nawiąż połączenie SSH, aby zalogować się na serwer NAS.
- Przejdź do ścieżki folderu, w którym zapisano convmv.
Wprowadź polecenie: Uruchom: cd /share/Public - Rozpakuj plik.
Wprowadź polecenie: Uruchom: tar -xvf convmv-2.05.tar.gz - Przejdź do ścieżki folderu, w którym zapisano rozpakowane pliki.
Wprowadź polecenie: Uruchom: cd convmv-2.05 - Upewnij się, że convmv jest wykonywalny.
Wprowadź polecenie: Uruchom: chmod a+x convmv - Zmodyfikuj ścieżkę powłoki Perl dla serwera NAS.
Wprowadź polecenie: Uruchom: sed -i -e'1c\#\!\/opt\/bin\/perl' convmv - Przekonwertuj nazwy plików.
Wprowadź polecenie: Uruchom: ./convmv -r --nfc --nosmart -f UTF-8 -t UTF-8 --notest
Uwaga:
Powyższe instrukcje opracowano na podstawie oprogramowania QTS w wersji 4.3.6 na platformie x86_64. Próba wykonania tych kroków w starszych wersjach oprogramowania może przynieść inne rezultaty. Na przykład ścieżka powłoki Perl w kroku 10 może się różnić, dlatego konieczne może być zastąpienie jej właściwą ścieżką.
Powyższe instrukcje nie dotyczą modeli opartych na architekturze ARM.
Źródła:
Unicode equivalence - Wikipedia
Unicode equivalence - Wikipedia
Index of /linux/convmv
convmv(1) - Linux man page
http://unicode.org/reports/tr15