Depende do sistema de arquivos que eu uso? Por exemplo, ext2 / ext3 / ext4, mas também o que acontece quando insiro um desses CD-ROMs "joliet" com a ISO 9660? Ouvi dizer que o POSIX contém algum tipo de especificação para a codificação charset de nomes de arquivos?
Basicamente, o que me pergunto é se eu tenho um nome de arquivo codificado em UTF-8, que processamento / cobertura preciso fazer antes de passá-lo para uma API de E / S de arquivo no Linux?
filenames
character-encoding
locale
Martin
fonte
fonte
Respostas:
Como observado por outros, não há realmente uma resposta para isso: nomes de arquivos e caminhos não têm 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.
Especificamente, o Glib (usado pelos aplicativos Gtk +) pressupõe que todos os nomes de arquivos sejam codificados em UTF-8, independentemente do local do usuário . Isso pode ser substituído pelas variáveis de ambiente G_FILENAME_ENCODING e G_BROKEN_FILENAMES .
Por outro lado, o Qt assume como padrão todos os nomes de arquivos codificados no código do idioma do usuário atual . Um aplicativo individual pode optar por substituir essa suposição, embora eu não conheça nenhum deles, e não haja uma opção de substituição externa.
As distribuições modernas do Linux são configuradas de modo que todos os usuários estejam usando localidades UTF-8 e os caminhos em montagens de sistemas de arquivos estrangeiros sejam traduzidos para UTF-8, portanto, essa diferença nas estratégias geralmente não tem efeito. No entanto, se você realmente quer estar seguro, não pode assumir nenhuma estrutura sobre nomes de arquivos além de "seqüência de bytes delimitada por N / terminada em N / '/'".
(Observe também: o código do idioma pode variar de acordo com o processo. Dois processos diferentes executados pelo mesmo usuário podem estar em códigos de idioma diferentes, simplesmente configurando diferentes variáveis de ambiente.)
fonte
'\x2F'
independentemente da aparência/
. Notavelmente diferente no SJIS.A camada unix / posix do linux não se importa com a codificação usada. Ele armazena a sequência de bytes da sua codificação atual como está.
Acho que essas opções de montagem existem para ajudá-lo a converter sistemas de arquivos específicos que definem um conjunto de caracteres para o conjunto de caracteres do sistema. (CDROMs, NTFS e variantes FAT usam algumas variantes unicode).
Eu gostaria que o unix definisse uma codificação global do sistema, mas na verdade é uma configuração por usuário. Portanto, se você definir uma codificação diferente do seu colega, seus nomes de arquivos aparecerão de maneira diferente.
fonte
Depende de como você monta o sistema de arquivos, basta dar uma olhada nas opções de montagem para diferentes sistemas de arquivos
man mount
. Por exemploiso9660
,vfat
efat
temiocharset
eutf8
opções.fonte