Por que os caracteres unicode não estão sendo renderizados corretamente


19

Fundo:

  • Eu tenho alguns caracteres unicode no meu prompt (marcadores de status git essencialmente)
  • Estou executando o urxvt no xfce no arch linux.
  • Estou usando a fonte DejaVu Sans Mono for Powerline, especificada na linha .Xresources:

    URxvt*font: xft:DejaVu Sans Mono for Powerline:pixelsize=14

Quando inicio o urxvt, os caracteres unicode não são renderizados corretamente.

Por exemplo

● é processado como

No entanto, se eu iniciar um novo a urxvtpartir do primeiro terminal, tudo será processado corretamente.

Não parece haver nenhuma diferença no ambiente entre os dois terminais.

Qual poderia ser a diferença entre a primeira chamada e a chamada aninhada? Suspeito que a fonte não esteja correta na instância 'externa', mas não sei como verificar a fonte de uma janela X em execução

ATUALIZAÇÃO : Parece que o código do idioma não está configurado corretamente no iniciador de aplicativos para o xfce4, mas presumivelmente o shell dentro do primeiro terminal possui seu próprio código de idioma, o que significa que os dois shells têm o mesmo código de idioma.

adicionando

export LANG=en_GB.UTF-8

para .xinitrc antes que o xfce4 seja iniciado parece corrigi-lo. Eu suspeito que essa não seja a maneira correta , mas funciona bem o suficiente para mim.

captura de tela demonstra o problema:

insira a descrição da imagem aqui

Nota: mudei esta pergunta de serverfault.com - espero que este site seja mais apropriado


Como você inicia o X? Como você inicia o "primeiro" terminal? Parece que o ambiente é diferente para esses dois.
Ярослав Рахматуллин

Tente executar a LC_ALL=ru_RU.utf8 urxvtpartir da sessão X atual. Se os caracteres russos (e outros Unicode) ficarem corretos, você estará no caso em que seu ambiente estiver sendo executado no código C. Portanto, verifique as configurações de localidade xfce. Por exemplo, se você o iniciou, .xinitrctente definir o código do idioma antes de executar como LANG=ru_RU.utf8 exec startxfce4.
Alexander I.Grafov

Eu tive o mesmo problema. Isso foi causado pela maneira como eu estava iniciando o startx. Em vez de fazer "exec startx", eu estava fazendo "startx" no meu .zprofile
Samir Sadek

Respostas:


12

Não sei ao certo qual é a causa do problema, mas as etapas abaixo podem ajudar:

  1. Confirme se o código do idioma está configurado corretamente

    $ localidade
    LANG = pt_BR.UTF-8
    LC_CTYPE = "en_US.UTF-8"
    LC_NUMERIC = "en_US.UTF-8"
    LC_TIME = "pt_BR.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 = pt_BR.UTF-8
    
  2. Habilite os locais desejados em /etc/locale.gen e execute locale-gen

    $ cat /etc/locale.gen | grep UTF
    pt_US.UTF-8 UTF-8
    nb_NO.UTF-8 UTF-8
    ru_RU.UTF-8 UTF-8
    
  3. Verifique se a fonte desejada pode ser carregada

    $ xset + fp / usr / share / fontes / cirílico
    $ fc-cache
    $ fc-list # para verificar

  4. Aplique as configurações em .Xdefaults (ou similar) antes de iniciar o "primeiro terminal"
    xrdb ~ / .Xdefaults


Definitivamente, isso tem a ver com a localidade (consulte minha atualização para a pergunta); portanto, aceite esta resposta, pois ela me indicou a direção correta. Thnks.
sw1nn

Geralmente não é uma péssima idéia colocar as configurações de localidade em ~ / .bash_profile (~ / .zprofile), mas o ~ / .xinitrc também funcionaria.
Ярослав Рахматуллин

se eu entrar em um terminal virtual (ou seja, sem X) tudo funciona. O bit de shell está funcionando bem, é específico para X
sw1nn

Provavelmente porque o X (ou startxfce) foi iniciado a partir de um shell sem logon que não lê LANG & co a partir de um perfil. Para o bash, ~ / .bashrc pode ser usado para definir itens para shells que não são de login. Mas, como eu disse, não há nada errado em deixar suas configurações de localidade e outras variáveis ​​em ~ / .xinitrc.
Ярослав Рахматуллин

Esse problema também pode afetar todos os caracteres devido ao espaçamento entre letras estar muito próximo. Por exemplo, conjunto URxvt.letterSpace: -10e todos os caracteres exibidos como caixas
DavisDude

0

Para mim, foi um problema com os glifos de linha de força no urxvt. Acabei de descobrir que definir o código do idioma localectl set-locale LANG=en_AU.UTF-8corrige o problema para mim, pelo menos com a fonte powerline terminess (não tentei outras fontes)

símbolos de linha de força urxvt

Não estava funcionando en_US.UTF-8, tenho certeza, porque posso reproduzi-lo ... agora isso é estranho ... mas funciona agora.

fonte

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.