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, typepolecenie Windows po prostu zwraca zawartość Ab. Trzeci plik również różni się od aB w Linuksie.
(Windows 10 NTFS).