web-dev-qa-db-fra.com

Pourquoi les caractères unicode ne sont pas restitués correctement

Contexte:

  • J'ai quelques caractères unicode dans mon invite (marqueurs d'état git essentiellement)
  • J'exécute urxvt sous xfce sur Arch Linux.
  • J'utilise la police DejaVu Sans Mono for Powerline, spécifiée via la ligne .Xresources:

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

Lorsque je lance urxvt, les caractères unicode ne sont pas restitués correctement.

Par exemple

● rend comme â

Cependant, si je lance un nouveau urxvtdepuis le premier terminal, tout est rendu correctement.

Il ne semble pas y avoir de différence d’environnement entre les deux terminaux.

Quelle pourrait être la différence entre la première invocation et l'invocation imbriquée? Je soupçonne que la police n'est pas correcte dans l'instance 'externe', mais je ne sais pas comment vérifier la police d'une fenêtre X en cours d'exécution

UPDATE: Il semble que les paramètres régionaux ne soient pas correctement configurés dans le lanceur d'applications pour xfce4, mais le shell situé à l'intérieur du premier terminal possède ses propres paramètres régionaux, ce qui signifie que les deux environnements ont les mêmes paramètres régionaux.

ajouter

export LANG=en_GB.UTF-8

.xinitrc avant que xfce4 ne soit démarré semble résoudre le problème. Je soupçonne que ce n'est pas correct , mais cela fonctionne assez bien pour moi.

capture d'écran illustre le problème:

enter image description here

Remarque: j'ai déplacé cette question de serverfault.com - j'espère que ce site est plus approprié

18
sw1nn

Je ne suis pas tout à fait certain de la cause du problème, mais les étapes ci-dessous pourraient aider:

  1. Confirmez que les paramètres régionaux sont configurés correctement

     $ 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. Activez les paramètres régionaux souhaités dans /etc/locale.gen et exécutez 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. Assurez-vous que la police souhaitée peut être chargée

     $ xset + fp /usr/share/fonts/cyrillic
    $ fc-cache 
     $ fc-list # à vérifier
  4. Appliquez les paramètres de .Xdefaults (ou similaire) avant de démarrer le "premier terminal"
    xrdb ~/.Xdefaults

Pour moi, c’était un problème avec les glyphes sur courant porteur dans urxvt. Je viens de découvrir que définir les paramètres régionaux avec localectl set-locale LANG=en_AU.UTF-8 corrige le problème pour moi, avec au moins la police terminess powerline (je n'ai pas essayé d'autres polices).

urxvt powerline symbols

Cela ne fonctionnait pas avec en_US.UTF-8, je suis assez sûr car je peux le reproduire ... maintenant c'est étrange ... mais cela fonctionne maintenant.

source

0
sera