Czy to zależy od używanego systemu plików? Na przykład ext2 / ext3 / ext4, ale także co się stanie, gdy włożę jedną z tych „radosnych” płyt CD-ROM z ISO 9660? Słyszałem, że POSIX zawiera specyfikację kodowania zestawów nazw plików?
Zasadniczo zastanawiam się, czy jeśli mam nazwę pliku zakodowaną w UTF-8, jakie przetwarzanie / kowariancję muszę wykonać przed przekazaniem go do interfejsu API we / wy pliku w systemie Linux?
filenames
character-encoding
locale
jaskółka oknówka
źródło
źródło
Odpowiedzi:
Jak zauważają inni, tak naprawdę nie ma na to odpowiedzi: nazwy plików i ścieżki nie mają kodowania; system operacyjny zajmuje się tylko sekwencją bajtów. Poszczególne aplikacje mogą w jakiś sposób interpretować je jako zakodowane, ale to się różni.
W szczególności Glib (używany przez aplikacje Gtk +) zakłada, że wszystkie nazwy plików są zakodowane w UTF-8, niezależnie od ustawień regionalnych użytkownika . Można to zastąpić zmiennymi środowiskowymi G_FILENAME_ENCODING i G_BROKEN_FILENAMES .
Z drugiej strony Qt domyślnie zakłada, że wszystkie nazwy plików są zakodowane w ustawieniach regionalnych bieżącego użytkownika . Indywidualna aplikacja może zastąpić to założenie, chociaż nie znam żadnego takiego, i nie ma zewnętrznego przełącznika zastępowania.
Nowoczesne dystrybucje Linuksa są skonfigurowane w taki sposób, że wszyscy użytkownicy używają ustawień narodowych UTF-8, a ścieżki w podłączeniach obcych systemów plików są tłumaczone na UTF-8, więc ta różnica w strategiach na ogół nie ma wpływu. Jednakże, jeśli naprawdę chcesz być bezpieczny, nie możesz zakładać żadnej struktury dotyczącej nazw plików poza „NUL-terminated,” / ”- delimitowana sekwencja bajtów”.
(Uwaga: ustawienia regionalne mogą się różnić w zależności od procesu. Dwa różne procesy uruchomione przez tego samego użytkownika mogą znajdować się w różnych lokalizacjach po prostu przez ustawienie różnych zmiennych środowiskowych.)
źródło
'\x2F'
bez względu na to, jak to wygląda/
. Szczególnie różni się w SJIS.Warstwa linuksowa unix / posix nie ma znaczenia, jakiego kodowania używasz. Przechowuje sekwencję bajtów bieżącego kodowania w stanie, w jakim się znajduje.
Myślę, że te opcje montowania służą do konwersji określonych systemów plików, które definiują zestaw znaków do zestawu znaków systemowych. (CDROM-y, NTFS i warianty FAT używają niektórych wariantów Unicode).
Chciałbym, aby unix zdefiniował globalne kodowanie systemowe, ale tak naprawdę jest to ustawienie dla użytkownika. Więc jeśli zdefiniujesz inne kodowanie niż twoja koleżanka, twoje nazwy plików pojawią się inaczej.
źródło
Zależy to od sposobu zamontowania systemu plików, wystarczy spojrzeć na opcje montowania dla różnych systemów plików w
man mount
. Na przykładiso9660
,vfat
ifat
miećiocharset
iutf8
opcje.źródło