O sistema não está mais exibindo caracteres UTF-8

2

Acabei de ter um problema com o meu servidor, no qual ele respondeu de forma incrivelmente lenta, então forcei a inicialização do SSH. Quando me conectei de volta, descobri que meu sistema não exibe mais certos caracteres corretamente.

Exemplo: eu uso muito o comando tree para ver rapidamente como um diretório é estruturado e o que há dentro dele, quando eu usá-lo em outro sistema, recebo esta saída:

root@hostname:/tmp# tree
.
└── test
    ├── bar
    │   ├── bar
    │   ├── baz
    │   └── foo
    └── foo

2 directories, 4 files

No entanto, se eu fizer isso no meu sistema, recebo o seguinte:

root@hostname:/tmp# tree
.
ΓööΓöÇΓöÇ test
    Γö£ΓöÇΓöÇ bar
    │   ├── bar
    │   ├── baz
    │   └── foo
    ΓööΓöÇΓöÇ foo

2 directories, 4 files

Existe alguma maneira de descobrir como isso aconteceu? E como eu poderia restaurá-lo?

Editar

usando LC_ALL=C tree gera o seguinte:

root@hostname:/tmp# LC_ALL=C tree
.
'-- test
    |-- bar
    |   |-- bar
    |   |-- baz
    |   '-- foo
    '-- foo

2 directories, 4 files

O uso de locale gera o seguinte:

root@hostname:/tmp# locale
LANG=en_GB.utf8
LANGUAGE=
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME="en_GB.utf8"
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8"
LC_MEASUREMENT="en_GB.utf8"
LC_IDENTIFICATION="en_GB.utf8"
LC_ALL=en_GB.utf8
    
por Paradoxis 08.05.2016 / 14:38

1 resposta

3

A informação na pergunta é incompleta. No entanto, a saída de amostra mostra mais caracteres na árvore codificada incorretamente do que se esperaria. Provavelmente, o que está acontecendo é que tree está sendo executado em um ambiente no qual ele pode enviar o UTF-8. Para os caracteres gráficos usados, são 3 bytes por caractere especial. De um lado (local ou remoto não importa), OP está usando algo que recodifica os em UTF-8, aumentando o número de bytes (já que cada um dos bytes na saída de tree estará no intervalo 128-255).

Por exemplo, se o OP estiver rodando em xterm (usando lite ), e confundiu as coisas (na verdade) dizendo que a codificação real é en_GB , ele irá traduzir cada um desses 128-255 valores em 2-3 bytes ("de volta" em UTF-8).

A propósito, bash não é relevante para a questão, porque é árvore (um utilitário distinto) que escreve o texto.

    
por 08.05.2016 / 18:26