ssh e codificação de caracteres

16

Quando entro sshno meu VPS, estou irssiexecutando na tela. Quando alguém envia um caractere unicode (como © ou €), irssiexibe lixo quando eu o uso pela tela em uma sshsessão. Se eu conectar-me a isso irssiusando o módulo proxy do irssi, a partir do irssi em execução no meu computador local, ele será exibido corretamente.

Da mesma forma, se eu executar o ghci no meu VPS (fora da tela) e inserir um desses caracteres, ele trava.

Portanto, obviamente, há algum tipo de problema na codificação de caracteres com minha conexão ao meu VPS, no ssh ou na configuração do sistema.

Como posso descobrir o que está causando isso e resolvê-lo?

Detalhes:

Sistema do cliente

  • Arch Linux x64
  • Codificação UTF-8

Sistema VPS

  • Ubuntu Server 10.04
  • Codificação desconhecida usada. Como encontro isso? (Eu apenas tenho que procurar no meu /etc/rc.conf o Arch)
Macha
fonte

Respostas:

18

A execução do localecomando fornecerá informações sobre suas configurações de localidade; a codificação de caracteres é fornecida pela LC_CTYPEconfiguração.

No Ubuntu, as configurações padrão de localidade são fornecidas em /etc/default/locale. Você pode alterar a codificação de caracteres definindo LC_CTYPEseu ~/.profileno VPS, por exemplo

export LC_CTYPE=en_US.UTF-8

Você precisará garantir que o en_US.UTF-8código do idioma esteja disponível. O Ubuntu gera apenas dados de localidade para localidades solicitadas. Todas as localidades em inglês devem estar disponíveis se você tiver o pacote language-pack-en-baseinstalado. Você pode solicitar manualmente sua geração com

sudo locale-gen en

Você também pode adicionar entradas para /var/lib/locales/supported.d/localgarantir que um código de idioma específico esteja instalado (por exemplo, adicione a linha en_US.UTF-8 UTF-8).

Gilles 'SO- parar de ser mau'
fonte
3

Na verdade, o valor fornecido em LC_CTYPE é um nome de localidade . É habitual, mas não obrigatório, que a codificação do conjunto de caracteres esteja no nome.

Mas se você quiser saber, com certeza, o conjunto de caracteres, então o comando é locale -k charmap.

~$ LC_CTYPE=C locale -k charmap
charmap="ANSI_X3.4-1968"
~$ LC_CTYPE=fr_BE locale -k charmap
charmap="ISO-8859-1"

(observe como o conjunto de caracteres não aparece nos valores LC_TYPE acima).

Pablo Saratxaga
fonte