Os caracteres UTF-8 não são exibidos corretamente no Debian

5

Breve descrição do meu problema:
Eu me deparei com um problema ultimamente, onde eu sou incapaz de fazer bash / nano / irssi / etc exibir caracteres UTF-8 "especiais" como o alemão trema (äüö), o sinal euro (€) e alguns outros caracteres UTF-8 como ß , §, etc.

O que eu já tentei:

  • dpkg-reconfigure locales e gerado apenas en_US.UTF-8
  • definindo LC_ALL , LANG e LANGUAGE para en_US.UTF-8 dentro do .bashrc para meu usuário e root
  • localidades reinstaladas e libx11-data (que parece conter todos os dados de idioma)

É claro que eu loguei novamente via ssh após todas essas mudanças e até tentei reiniciar o servidor mesmo sabendo que ele não resolve nenhum problema no Linux em 99,9875% de todos os casos.

Informações sobre o meu sistema:
SO: extensão Debian - > Linux 3.2.0-4-amd64 # 1 SMP Debian 3.2.63-2 x86_64 GNU / Linux
locales: v.2.22-7

Saída de locale :

LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

Ao digitar, por exemplo, ä no console e pressione Enter, recebo -bash: $'4': command not found .
Honestamente, estou sem ideias, alguém pode me ajudar com isso?

    
por Steffen 08.05.2016 / 18:36

2 respostas

3

Você disse ao bash e a outros aplicativos que seu terminal usa a codificação UTF-8. Isso é bom apenas se o seu terminal realmente usar o UTF-8. Bash não consegue decidir que a codificação do terminal é, o terminal decide.

Se você quiser usar o UTF-8, configure seu terminal para usar o UTF-8. Como você está usando o SSH, é necessário configurar o terminal em que está executando o cliente SSH para usar o UTF-8. Esse é o padrão na maioria dos sistemas modernos, mas aparentemente o seu não está configurado dessa maneira.

Você deve evitar definir LC_CTYPE explicitamente em um terminal: o ideal é que o terminal configure isso. No entanto, isso nem sempre funciona, especialmente no SSH (em muitos sistemas, o servidor SSH proíbe o cliente de definir LC_CTYPE ).

Se você precisar definir a variável de ambiente, o lugar certo seria .profile , não .bashrc .

    
por 09.05.2016 / 00:18
2

Parece que você está usando o console do Linux (em vez de um dos emuladores de terminal baseados em X) e que não está sendo executado no modo UTF-8. Eu usaria esse script para ativá-lo (e investigar para ver por que ele está desativado):

#!/bin/sh
# send character-string to enable UTF-8 mode
if test ".$1" = ".off" ; then
        printf '3%%@'
else
        printf '3%%G'
fi

ou seja, chame o script utf8 e digite

utf8 on

Para investigar as mensagens de erro, criei um script como este, em dois tipos (um em UTF-8 e outro em ISO-8859-1):

#!/bin/bash
printf "ä\n"
echo "ä"
ä

O script UTF-8 diz

$ ./foo
ä
ä
./foo: line 4: ä: command not found

e o script ISO-8859-1 diz (em um terminal usando um locale com codificação UTF-8):

$ ./foo2
�
�
./foo2: line 5: $'4': command not found

O ponto é que bash ajusta sua mensagem de erro para corresponder à localidade e, visto que não pode mostrar o caractere ISO-8859-1 na localidade UTF-8, mostra-o como um número octal.

    
por 08.05.2016 / 22:38