É difícil entender como funciona a codificação de nome de arquivo. No unix.SE, encontro explicações contraditórias.
Os nomes de arquivos são armazenados como caracteres
Para citar outra resposta: Várias perguntas sobre a codificação de caracteres do sistema de arquivos no linux
[…] Como você mencionou na sua pergunta, um nome de arquivo UNIX é apenas uma sequência de caracteres; o kernel não sabe nada sobre a codificação, que é inteiramente um conceito de espaço do usuário (ou seja, no nível do aplicativo).
Se os nomes dos arquivos são armazenados como caracteres, é necessário que haja algum tipo de codificação, pois, finalmente, o nome do arquivo deve terminar como uma sequência de bits ou bytes no disco. Se o usuário puder escolher qualquer codificação para mapear os caracteres para uma sequência de bytes que é alimentada no kernel, é possível criar qualquer sequência de bytes para um nome de arquivo válido.
Suponha o seguinte: Um usuário usa uma codificação aleatória X , que converte o arquivo foo
na sequência de bytes α e o salva no disco. Outros usos do utilizador que codifica Y . Nesta codificação, α traduz para /
, o que não é permitido como um nome de arquivo. No entanto, para o primeiro usuário, o arquivo é válido.
Presumo que esse cenário não possa acontecer.
Os nomes de arquivos são armazenados como blobs binários
Para citar outra resposta: Qual codificação de charset é usada para nomes de arquivos e caminhos no Linux?
Como observado por outros, não há realmente uma resposta para isso: nomes de arquivos e caminhos não possuem uma codificação; o sistema operacional lida apenas com a sequência de bytes. Aplicativos individuais podem optar por interpretá-los como sendo codificados de alguma forma, mas isso varia.
Se o sistema não lida com caracteres, como caracteres específicos (por exemplo, /
ou NULL
) podem ser proibidos em nomes de arquivos? Não existe noção de a /
sem codificação.
Uma explicação seria que o sistema de arquivos pode armazenar nomes de arquivos que contenham qualquer
caractere e são apenas os programas do usuário que levam em consideração uma codificação que sufocariam os nomes de arquivos que contenham caracteres inválidos. Isso, por sua vez, significa que os sistemas de arquivos e o kernel podem, sem nenhuma dificuldade, manipular nomes de arquivos contendo a /
.
Eu também assumo que isso está errado.
Onde ocorre a codificação e onde está a restrição de não permitir caracteres específicos?