Perché i caratteri Unicode non vengono visualizzati correttamente?


19

Sfondo:

  • Ho alcuni caratteri unicode nel mio prompt (essenzialmente indicatori di stato git)
  • Sto eseguendo urxvt sotto xfce su arch linux.
  • Sto usando DejaVu Sans Mono per il carattere Powerline, specificato tramite la linea .Xresources:

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

Quando inizio urxvt i caratteri Unicode non vengono visualizzati correttamente.

Per esempio

● viene visualizzato come â

Tuttavia, se inizio quindi un nuovo urxvtall'interno del primo terminale, tutto viene visualizzato correttamente.

Non sembra esserci alcuna differenza nell'ambiente tra i due terminali.

Quale potrebbe essere la differenza tra la prima chiamata e la chiamata nidificata? Sospetto che il carattere non sia corretto nell'istanza "esterna", ma non sono sicuro di come controllare il carattere di una finestra X in esecuzione

AGGIORNAMENTO : Sembra che le impostazioni locali non siano configurate correttamente nel programma di avvio dell'app per xfce4, ma presumibilmente la shell all'interno del primo terminale ha le proprie impostazioni locali, il che significa che entrambe le shell hanno le stesse impostazioni locali.

aggiungendo

export LANG=en_GB.UTF-8

a .xinitrc prima dell'avvio di xfce4 sembra risolverlo. Sospetto che questo non sia il modo corretto , ma funziona abbastanza bene per me.

screenshot mostra il problema:

inserisci qui la descrizione dell'immagine

Nota: ho spostato questa domanda da serverfault.com - spero che questo sito sia più appropriato


Come si avvia X? Come si avvia il "primo" terminale? Sembra che l'ambiente sia diverso per questi due.
Ярослав Рахматуллин,

Prova a eseguire LC_ALL=ru_RU.utf8 urxvtdalla sessione X corrente. Se i caratteri russi (e altri caratteri Unicode) sono diventati corretti, nel caso in cui l'ambiente sia stato eseguito in C locale. Quindi controlla le impostazioni locali per xfce. Ad esempio, se lo si avvia nel .xinitrctentativo di impostare le impostazioni internazionali prima di eseguire come LANG=ru_RU.utf8 exec startxfce4.
Alexander I.Grafov,

Ho avuto lo stesso problema. È stato causato dal modo in cui ho avviato startx. Invece di fare "exec startx" stavo facendo "startx" nel mio .zprofile
Samir Sadek l'

Risposte:


12

Non sono del tutto sicuro di quale sia la causa del problema, ma i passaggi seguenti potrebbero aiutare:

  1. Confermare che le impostazioni internazionali siano configurate correttamente

    $ locale
    LANG = it_IT.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. Abilita le localizzazioni desiderate in /etc/locale.gen ed esegui 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. Assicurarsi che sia possibile caricare il carattere desiderato

    $ xset + fp / usr / share / fonts / cirillico
    $ fc-cache
    $ fc-list # da controllare

  4. Applicare le impostazioni da .Xdefaults (o simili) prima di avviare il "primo terminale"
    xrdb ~ / .Xdefaults


Questo ha sicuramente a che fare con le impostazioni locali (vedere il mio aggiornamento alla domanda), quindi accettare questa risposta poiché mi ha indicato la direzione corretta. Thnks.
sw1nn,

Di solito non è una terribile idea inserire le impostazioni locali in ~ / .bash_profile (~ / .zprofile), ma anche ~ / .xinitrc funzionerebbe.
Ярослав Рахматуллин

se accedo a un terminale virtuale (cioè senza X) funziona tutto. Il bit di shell funziona bene, è specifico per X
sw1nn

Probabilmente perché X (o startxfce) viene avviato da una shell non di accesso che non legge LANG & co da un profilo. Per bash, ~ / .bashrc può essere usato per impostare elementi per shell non di accesso. Ma come ho detto, non c'è niente di sbagliato nel lasciare le impostazioni della tua locale e altre variabili in ~ / .xinitrc.
Ярослав Рахматуллин

Questo problema può riguardare anche tutti i caratteri a causa della spaziatura delle lettere troppo stretta. Ad esempio, set URxvt.letterSpace: -10e tutti i personaggi vengono visualizzati come caselle
DavisDude,

0

Per me è stato un problema con glifi powerline in urxvt. Ho appena scoperto che l'impostazione delle impostazioni locali con localectl set-locale LANG=en_AU.UTF-8risolve il problema per me, almeno con il carattere powerline terminess (non ho provato altri caratteri)

simboli powerline urxvt

Non funzionava en_US.UTF-8, ne sono abbastanza sicuro perché posso riprodurlo ... ora è strano ... ma ora funziona.

fonte

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.