Czasami, podczas próby uzyskania dostępu do plików w folderze udostępnianym podczas korzystania z aplikacji Finder w systemie macOS za pośrednictwem SMB, otrzymuję kod błędu -43. Co jest tego przyczyną?

Na powyższym zrzucie ekranu aplikacja Finder podejmuje próbę uzyskania dostępu (za pośrednictwem SMB) do katalogu „1_ã” w folderze udostępnianym i utworzenia podfolderu, co kończy się błędem. Ma to miejsce, ponieważ znak „ã” jest kodowany przy użyciu formatu NFD (ang. Normalization Form D), który jest formatem standaryzacji Unicode, „Przekształcenia kanonicznego”.
Z punktu widzenia klienta jednak, aplikacja Finder wysyła żądanie przy użyciu formatu NFC, formatu „Przekształcenia kanonicznego”. Serwer NAS nie może rozpoznać nazwy katalogu ani go znaleźć, więc serwer zgłasza błąd.
Co więcej, w wyniku tej różnicy, niektóre pliki w folderach o nazwach zawierających litery formatu NFD mogą stać się niewidoczne i niedostępne w celu edycji. Operacje takie jak zmiana nazwy, tworzenie lub edytowanie plików w folderze takiego rodzaju mogą zakończyć się niepowodzeniem.
Błąd ten jest wynikiem tego, że serwer i klient korzystają z dwóch różnych formatów standaryzacji Unicode. W przypadku próby uzyskania dostępu przez użytkownika do folderu udostępnianego na serwerze NAS za pośrednictwem SMB, klient wyśle żądanie uzyskania informacji o tym, jakie pliki zawiera katalog. Po otrzymaniu żądania serwer NAS wyśle do klienta nazwy wszystkich plików zawartych w katalogu. Problem pojawia się, gdy nazwy plików korzystają z różnych formatów standaryzacji Unicode — w tym przypadku formatu NFD na serwerze i formatu NFC po stronie klienta. Ma to miejsce, gdy klient, zapisując pliki na serwerze NAS, wybierze inny format. Gdy klient otrzyma nazwy plików, poprosi serwer o ich wyświetlenie lub o utworzenie nowego pliku w danym katalogu. Format kodowania żądania zależy od ustawień po stronie klienta. Jeśli żądanie klienta ma inny format niż format użyty na serwerze, serwer nie będzie mógł znaleźć plików ani katalogów i zgłosi błąd.
Aby jednak konwertować nazwy plików zapisanych na serwerze NAS w formacie NFD na format NFC, można użyć narzędzia o nazwie convmv. Wykonaj poniższe czynności, aby zainstalować convmv.
- Zaloguj się na serwerze NAS i przejdź do App Center.
- Zainstaluj Perl.

- Przejdź do strony https://www.j3e.de/linux/convmv/ i pobierz convmv.
- Zapisz plik w katalogu na serwerze NAS. (Np. w folderze udostępnianym, Public)
- Otwórz Terminal i nawiąż połączenie SSH w celu zalogowania się na serwerze NAS.
- Wprowadź ścieżkę do folderu, w którym plik convmv został zapisany.
Wprowadź polecenie: Run: cd /share/Public - Wyodrębnij plik.
Wprowadź polecenie: Run: tar -xvf convmv-2.05.tar.gz - Wprowadź ścieżkę do folderu, w którym zapisano wyodrębnione pliki.
Wprowadź polecenie: Run: cd convmv-2.05 - Upewnij się, że plik convmv można uruchomić.
Wprowadź polecenie: Run: chmod a+x convmv - Zmień ścieżkę powłoki Perl dla serwera NAS.
Wprowadź polecenie: Run: sed -i -e'1c\\#\!\/opt\/bin\/perl' convmv - Konwertuj nazwy plików.
Wprowadź polecenie: Run: ./convmv -r --nfc --nosmart -f UTF-8 -t UTF-8 --notest <ścieżka do folderu z plikami do konwertowania>
Uwaga:
Instrukcje te są oparte na oprogramowaniu układowym QTS 4.3.6 z platformą x86_64. Próba wykonania powyższych czynności przy użyciu poprzednich wersji oprogramowania układowego może przynieść inne rezultaty. Na przykład: ścieżka powłoki Perl może różnić się w kroku 10 i może wystąpić konieczność zastąpienia jej ścieżką prawidłową.
Instrukcje te nie dotyczą modeli opartych na architekturze ARM.
Materiały referencyjne:
https://en.wikipedia.org/wiki/Unicode_equivalence#Errors_due_to_normalization_differences
https://en.wikipedia.org/wiki/Unicode_equivalence#Normalization
https://www.j3e.de/linux/convmv/
https://linux.die.net/man/1/convmv
http://unicode.org/reports/tr15