A aposta mais segura é consultar a entrada da Wikipedia para o conjunto de caracteres permitido para qualquer sistema operacional. Pode ser encontrado aqui .
Por exemplo, para a maioria dos sistemas baseados em unix, o conjunto de caracteres permitido é um conjunto de 8 bits e o caractere reservado é o caractere nulo (NUL, '\0'
). No entanto, não é uma boa prática usar os caracteres especiais nos nomes dos arquivos, pois eles apresentam um problema ao removê-los.
Por exemplo, posso ter um nome de arquivo como -ramesh.txt
e tento removê-lo como abaixo.
rm -ramesh.txt
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.
rm "-ramesh.txt"
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.
Eu preciso excluir o arquivo como,
rm -- "-ramesh.txt"
rm: remove regular empty file `-ramesh.txt'? y
Mais detalhes podem ser encontrados nesta resposta também .
No Linux e OS-X, apenas /
o conjunto ASCII imprimível é proibido, acredito. Alguns caracteres (como metacaracteres do shell *?!
) causarão problemas nas linhas de comando e exigirão que o nome do arquivo seja citado ou escapado adequadamente.
Os sistemas de arquivos Linux, como ext2, ext3, são agnósticos no conjunto de caracteres (acho que eles o tratam mais ou menos como um fluxo de bytes - apenas nulos e /
são proibidos). Isso significa que você pode armazenar nomes de arquivos na codificação UTF-8. Acredito que cabe ao shell ou outro aplicativo saber qual codificação usar para converter corretamente o nome do arquivo para exibição ou processamento.
Portanto, para concluir, o problema não está em usar caracteres especiais para nomes de arquivos, mas em como lidar com eles.