Sessão de tela gnu corrompida não exibindo UTF-8 corretamente

6

(Editado para esclarecer o papel do Emacs no problema com a exibição.)

Minha sessão gnu-screen atual ficou corrompida de alguma forma, e o Emacs não exibe corretamente os caracteres UTF-8.

Confirmei que em processos gnu-screen recém-iniciados, o Emacs exibe caracteres UTF-8 corretamente, mas no momento seria muito difícil substituir a sessão gnu-screen corrompida por uma nova e, em vez disso,

I'm looking for ways to further troubleshoot the problem with this corrupted gnu-screen session, and hopefully fix it.

FWIW, dou mais informações abaixo, incluindo uma descrição do que fiz até agora para diagnosticar o problema.

Comecei esta gnu-screen sessão há vários dias na minha estação de trabalho OS X no trabalho com

% screen -U

... (como sempre faço). Desde então, tenho anexado novamente esta sessão a partir de várias máquinas (possivelmente após o primeiro ssh -ing para minha estação de trabalho) usando

% screen -U -dR

(mais uma vez, isso é o que eu sempre faço). Eu fiz exatamente isso esta manhã na minha estação de trabalho no trabalho (a máquina onde o processo gnu-screen está realmente em execução).

Hoje, pela primeira vez desde que criei esta sessão gnu-screen , precisei trabalhar com arquivos que continham muitos caracteres UCE-8 não-ascii. Foi então que descobri que essa sessão gnu-screen deve ter sido corrompida de alguma forma, porque exibe todos esses caracteres como ? , resultando em uma exibição inutilizável.

(Como já aludi, esses arquivos ricos em UTF-8 são exibidos corretamente por gnu-screen sessões recém-iniciadas, por isso tenho certeza que o problema de exibição é com a sessão gnu-screen específica que aqui eu Além disso, confirmei que " ??? display" aparece em todos os terminais dos quais associei a sessão gnu-screen , portanto, o problema não está no programa terminal que hospeda a sessão gnu-screen Por último, eu também confirmei que o problema não é com uma sessão Emacs em particular: na sessão gnu-screen corrompida, todas as novas sessões do Emacs exibem os caracteres UTF-8 como ? , que argumenta contra o problema estar com uma sessão específica do Emacs.)

Confirmei que utf8 é on executando

:utf8 on on

A saída de :info é

(1,5)/(210,52)+10000 +(-)flow app log UTF-8 0(zsh)

E, FWIW:

% /usr/local/bin/screen --version
Screen version 4.00.03 (FAU) 23-Oct-06

Além disso, devo salientar que novo

O que mais posso fazer para solucionar esse problema?

ATUALIZAÇÃO: Drav Sloan e Stephane Chazelas perguntaram sobre minhas configurações de localidade:

% locale
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

Atualmente, para o OS X, não configuro nenhuma variável relacionada ao código do idioma.

Nos sistemas Linux, meu .zshenv é definido

export LANG=en_US.utf8
export LC_ALL=en_US.utf8

... mas se eu colocar as mesmas linhas no meu .zshenv em Darwin, recebo mensagens de erro dizendo que "a configuração da localidade falhou". Eu vagamente lembro de ter batido meu crânio por várias horas sobre o problema de encontrar as configurações de localidade corretas para Darwin / Lion. Pode ter sido que "definição de nada" emergiu como a solução "menos horrível" para o problema e, afinal, pelo menos gnu-screen sessões frescas exibem caracteres UTF-8 corretamente, mesmo na ausência de uma configuração de localidade explícita. Mas claramente eu preciso descobrir como definir o local em Darwin / Lion ...

UPDATE2: OK, acho que descobri o motivo dos erros que mencionei acima: em Darwin / Lion, a string en_US.utf8 é inválida; em vez disso, deve ser en_US.UTF-8 .

    
por kjo 26.08.2013 / 22:30

1 resposta

4

Eu tive o mesmo problema ao executar:

git clone https://github.com/jwiegley/git-scripts.git
cd git-scripts
perl git-forest 

Eu usei isso como meu teste. Basicamente, você deve obter linhas boas se tiver o utf8 definido corretamente. Se não, você receberá caixas ou caracteres feios.

A solução é que você precisa definir LC_ALL para en_US.UTF-8 ANTES iniciar uma nova sessão de tela. Eu me cansei de fazer isso depois de criar a sessão de tela e não tive sorte.

Aqui está o passo que eu segui para seguir em frente:

1) Execute locale para visualizar a configuração atual. Eu tenho isso (o que explica porque eu estava tendo problemas:

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

2) Antes de criar uma nova sessão de tela, você precisa redefinir LC_ALL para en_US.UTF-8

se você estiver usando csh shell

setenv LC_ALL en_US.UTF-8

se você estiver usando bash shell

export LC_ALL="en_US.UTF-8"

3) Verifique se LC_ALL foi definido corretamente, executando locale novamente:

LANG=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

4) Agora execute uma nova sessão de tela e execute o git-forest test e você verá linhas agradáveis

    
por 09.07.2014 / 18:58