Por que os caracteres unicode não são renderizados corretamente?

18

Antecedentes:

  • 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 por meio da 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

● renderiza como â

No entanto, se eu iniciar um novo urxvt dentro 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 invocação e a invocação aninhada? Eu suspeito que a fonte não está correta na instância 'externa', mas não tenho certeza de como verificar a fonte de uma janela X em execução

UPDATE : Parece que a localidade não está configurada corretamente no iniciador de aplicativos para xfce4, mas presumivelmente o shell dentro do primeiro terminal initora sua própria localidade, significando que ambas as camadas têm a mesma localidade .

adicionando

export LANG=en_GB.UTF-8

para .xinitrc antes de xfce4 ser iniciado parece consertá-lo. Eu suspeito que este não é o caminho correto , mas funciona bem o suficiente para mim.

A captura de tela

demonstra o problema:

Nota: eu mudei esta questão de serverfault.com - espero que este site seja mais apropriado

    
por sw1nn 24.11.2012 / 11:28

2 respostas

12

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

  1. Confirme se a localidade está configurada corretamente

    $ locale
    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
    
  2. Habilite as localidades desejadas em /etc/locale.gen e execute locale-gen

    $ cat /etc/locale.gen |grep UTF
    en_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/fonts/cyrillic
    $ fc-cache
    $ fc-list # to check
  4. Aplique as configurações de .Xdefaults (ou similar) antes de iniciar o "primeiro terminal"
    xrdb ~/.Xdefaults

    
por 24.11.2012 / 18:24
0

Para mim, foi um problema com os glifos powerline no urxvt. Acabei de descobrir que definir a localidade com localectl set-locale LANG=en_AU.UTF-8 corrige o problema para mim, com a fonte termine powerline, pelo menos (não tentei outras fontes)

Nãoestavafuncionandocomen_US.UTF-8,tenhocertezaporquepossoreproduzi-lo...agoraissoéestranho...masfuncionaagora.

fonte

    
por 31.12.2015 / 16:04

Tags