ssh e codificação de caracteres

15

Quando eu ssh no meu VPS, tenho irssi em execução na tela. Quando alguém envia um caractere unicode (como © ou €), irssi exibe lixo quando eu o uso através da tela em uma sessão ssh . Se eu me conectar a esse irssi usando o módulo proxy do irssi, 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 de uma tela) e entrar em um desses caracteres, ele falhará.

Então, obviamente, há um problema de codificação de caracteres de algum tipo com minha conexão com o meu VPS, seja em 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 eu acho isso? (Eu só tenho que olhar no meu /etc/rc.conf para Arch)
por Macha 17.10.2010 / 13:55

2 respostas

16

A execução do comando locale fornecerá informações sobre suas configurações de localidade; a codificação de caracteres é dada pela configuração LC_CTYPE .

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

export LC_CTYPE=en_US.UTF-8

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

sudo locale-gen en

Você também pode adicionar entradas a /var/lib/locales/supported.d/local para garantir que uma determinada localidade esteja instalada (por exemplo, adicione a linha en_US.UTF-8 UTF-8 ).

    
por 17.10.2010 / 14:50
3

de forma prática, o valor fornecido em LC_CTYPE é um código de idioma nome . É costume, mas não obrigatório, que a codificação do conjunto de caracteres esteja no nome.

Mas se você quiser saber, com certeza, o charset, 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).

    
por 04.03.2013 / 23:43