O Debian acha que meu sistema de arquivos é codificado como ISO-8859-1

1

Esse pode não ser o site apropriado para essa pergunta, porque é mais uma reclamação do que uma pergunta, mas aqui vai.

Hoje atualizei meu computador do Mint 15 para o Debian 7.6. E depois que fiz isso, meu computador achou que todos os nomes de arquivos existentes eram codificados como ISO-8859-1 em vez de UTF-8. Assim, por exemplo, nomes de arquivos contendo "à" agora são exibidos como "Ã" e assim por diante.
Acontece que eu precisava dizer ao meu sistema explicitamente que o sistema de arquivos usa o UTF-8, colocando export LANG=en_US.UTF-8 no meu arquivo .bashrc.

E a questão é: por quê? Por que algo assim deveria ser necessário hoje em dia, 2014? O padrão era UTF-8 para Mint, obviamente; Por que o Debian deveria ser diferente? O que faria com que o Debian usasse um padrão tão obscuro e desatualizado, mesmo se eu dissesse na hora da instalação o que eu queria que minha localidade fosse, e /etc/locale.gen contém apenas en_US.UTF8 UTF8 como a única linha (não comentada). E eu preciso lembrar de editar o arquivo .bashrc para cada nova conta de usuário que eu criar a partir de agora para editar a linha de exportação em?

    
por Mr Lister 20.07.2014 / 17:22

3 respostas

1

Primeiro, estou surpreso que você seja capaz de atualizar o Mint 15 para o Debian 7.6. Afinal, são distribuições diferentes.

Eu assumo que o Debian tomou a decisão de usar a ISO 8859.1 porque você está na Europa e respondeu a alguma pergunta sobre o local.

    
por 20.07.2014 / 20:05
1

A localidade padrão no Debian está em um UTF-8 codificação, pelo menos desde wheezy (não me lembro quando mudou). Então você deve ter escolhido alguma configuração não padrão durante a instalação.

putting export LANG=en_US.UTF-8 in my .bashrc file.

Isso não funcionará porque .bashrc é o arquivo errado . Uma variável de ambiente definida apenas se aplica a programas iniciados a partir de um terminal.

O local certo para definir essa variável de ambiente é /etc/environment para torná-la uma configuração do sistema ou ~/.pam_environment para torná-la uma configuração por usuário. Ambos os arquivos são lidos no momento do login (por todos os métodos de login).

A variável de localidade específica para a codificação de caracteres é LC_CTYPE . A configuração de LANG define todas as configurações, incluindo LC_COLLATE , que pode ter surpreendentes conseqüências . Você deve definir apenas LC_CTYPE .

Portanto, remova a configuração LANG do seu .bashrc e adicione LC_CTYPE=en_US.utf8 onde ela pertence, ou seja, em /etc/environment ou ~/.pam_environment .

    
por 21.07.2014 / 02:09
1

do I need to remember to edit the .bashrc file for every new user account that I create from now on to edit the export line in?

A melhor idéia, neste caso, é colocá-lo em um arquivo do sistema; primeiro verifique se já está sendo definido em algum lugar:

grep -R LANG /etc

Você pode ou não querer mudar alguma coisa lá.

A resposta de Gilles provavelmente tem o lugar mais efetivo para definir isso, mas estou deixando o que tenho aqui, em parte, para explicar o que ele entende por "ler no momento do login (por todos os métodos de login)".

Você pode criar um arquivo ZZ-local.sh e colocá-lo em /etc/profile.d . Os arquivos lá são originados em ordem lexicográfica quando um usuário efetua login, então ZZ deve sobrepor qualquer coisa anterior. O arquivo não precisa ser executável ou conter um shebang, então a única linha export LANG=... deve estar bem.

Alguns gerenciadores de exibição de login da GUI não leem .profile - por exemplo, lightdm (você deve ter notado uma das grep ocorrências relacionadas a isso; lightdm exporta $LANG em um script de inicialização). Se for esse o caso, você vai querer fazer a mesma coisa que acabou de descrever o WRT /etc/profile.d , mas para /etc/X11/Xsession.d . Na verdade, não há mal nenhum em:

ln -s /etc/profile.d/ZZ-local.sh /etc/X11/Xsession.d/ZZ-local

Symlinking os dois arquivos. Apenas tenha em mente que isso pode significar que ele será originado duas vezes consecutivas, embora, se tudo o que você está fazendo for definir $LANG , tudo bem.

    
por 20.07.2014 / 17:38