Nazwy plików UTF 8?

15

Czy w systemach operacyjnych opartych na Uniksie nazwy plików utf6 są dozwolone? Jeśli tak, muszę zrobić coś specjalnego, aby zapisać plik na dysku.

Pozwól mi wyjaśnić, co mam nadzieję zrobić. Piszę aplikację, która prześle plik przez ftp do zdalnego systemu, ale nazwa pliku jest dynamicznie zmieniana za pomocą zestawu metadanych, które potencjalnie mogą znajdować się w utf8. Zastanawiam się, czy jest coś, co muszę zrobić, aby zapisać plik na dysku w unix / linux.

Również jako kontynuacja, czy ktoś wie, co by się stało, gdybym załadował nazwę pliku utf 8 do systemu, nie obsługuje utf8?

Mark D.
źródło

Odpowiedzi:

20

W systemach Unix / Linux nazwa pliku jest sekwencją dowolnych bajtów oprócz ukośnika lub wartości NUL. Ukośnik oddziela komponenty ścieżki, a NUL kończy nazwę ścieżki.

Możesz więc użyć dowolnego kodowania dla nazw plików. Niektóre aplikacje mogą mieć problemy z niektórymi kodowaniami, jeśli są naiwne co do znaków w nazwach plików - na przykład źle napisane skrypty powłoki często nie obsługują nazw plików ze spacjami.

Nowoczesne środowiska Unix / Linux radzą sobie dobrze z nazwami plików zakodowanych w UTF-8.

camh
źródło
12

Wewnętrznie większość systemów plików przechowuje bajty: sterownik systemu plików nie dba o to, co oznaczają bajty. Ogólny sterownik systemu plików w systemie Linux i większości innych współczesnych unikatów pozwala na pojawienie się dowolnego bajtu innego niż /bajt zerowy w nazwie pliku.

Istnieją systemy plików, które mogą mieć ograniczenia kodowania - zwykle nie-rodzime systemy plików, takie jak FAT lub NTFS. Niektóre sieciowe systemy plików, takie jak Samba, mogą tłumaczyć między kodowaniem serwera a kodowaniem klienta; musisz upewnić się, że konfiguracje serwera i klienta są spójne.

Konwencjonalnie w większości systemów bajty tworzące nazwę pliku są interpretowane jako UTF-8. Jeśli uruchomisz aplikację, która interpretuje nazwy plików jako znaki, na przykład aplikację, która przesyła nazwy przez FTP, może być konieczne skonfigurowanie tej aplikacji, aby informowała, że ​​twoje nazwy plików są zakodowane w UTF-8. Ustawienie środowiska LC_CTYPEna ustawienia regionalne UTF-8, podobnie jak en_US.UTF-8w przypadku wielu aplikacji wiersza polecenia.

Jeśli przechowujesz pliki w systemie, który nie obsługuje UTF-8, nie ma to znaczenia. Bajty pozostaną takie same. Nie będziesz mógł wyświetlić znaków tworzących nazwy plików, ale jeśli skopiujesz pliki z powrotem do systemu obsługującego UTF-8, te same bajty będą nadal wyświetlane jako znaki UTF-8.

Jeśli piszesz własną aplikację, dobrym pomysłem jest używanie UTF-8 wewnętrznie oraz, w miarę możliwości, do przechowywania i przesyłania.

Gilles „SO- przestań być zły”
źródło