Podsumowanie:
- Windows: wszystko oprócz znaków kontrolnych ASCII i
\/:*?"<>|
- Linux, OS-X: wszystko oprócz null lub
/
Na wszystkich platformach najlepiej unikać znaków niedrukowalnych, takich jak znaki kontrolne ASCII.
Windows
W systemie Windows Eksplorator Windows nie zezwala na znaki sterujące lub \/:*?"<>|
możesz używać spacji. Jeśli używasz spacji, często będziesz musiał podać nazwę pliku, gdy jest używany z wiersza poleceń (ale o ile wiem, nie ma to wpływu na aplikacje GUI). System plików Windows, taki jak NTFS, najwyraźniej przechowuje kodowanie z nazwą pliku, ale UTF-16 jest standardem.
W niektórych częściach systemu Windows rozróżniana jest wielkość liter, w innych częściach rozróżniana jest wielkość liter. Łatwo jest tworzyć różne nazwy plików, takie jak „Ab” i „ab” w systemie plików Windows NTFS. Nazwy te odnoszą się do oddzielnych plików, które zawierają odrębną oddzielną treść. Jednak chociaż wiersz polecenia systemu Windows chętnie wyświetla oba pliki przy użyciu dir
, nie można łatwo uzyskać dostępu do jednego z nich ani nim manipulować za pomocą takich poleceń, jak type
. Patrz poniżej.
Linux, OS-X
/
Uważam, że w Linuksie i OS-X tylko zestaw ASCII do wydruku jest zabroniony. Niektóre znaki (takie jak metaznaki powłoki *?!
) powodują problemy w wierszach poleceń i wymagają odpowiedniego cytowania lub zmiany znaczenia nazwy pliku.
Systemy plików Linux, takie jak ext2, ext3, są agnostyczne dla zestawu znaków (myślę, że traktują to mniej więcej jako strumień bajtów - tylko wartości zerowe i /
są zabronione). Oznacza to, że możesz przechowywać nazwy plików w kodowaniu UTF-8. Sądzę, że od powłoki lub innej aplikacji zależy, jakiego kodowania użyć, aby poprawnie przekonwertować nazwę pliku do wyświetlania lub przetwarzania.
Wniosek
Prawdopodobnie mógłbyś bezpiecznie użyć czegoś takiego ✣
(gdyby nie było tak trudno pisać)
Czułość na (w) w systemie Windows
C> dir /B
Ab
aB
аB
C> type Ab
b
b
C> type aB
b
b
C> type аB
unicode homograph
Zauważ, że nie możemy wpisać zawartości drugiego pliku, type
polecenie Windows po prostu zwraca zawartość Ab. Trzeci plik również różni się od aB w Linuksie.
(Windows 10 NTFS).