Pourquoi les caractères Unicode ne s'affichent-ils pas correctement

19

Contexte:

  • J'ai des caractères Unicode dans mon invite (marqueurs d'état git essentiellement)
  • J'utilise urxvt sous xfce sur arch linux.
  • J'utilise DejaVu Sans Mono pour la police Powerline, spécifiée via la ligne .Xresources:

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

Lorsque je démarre urxvt, les caractères unicode ne s'affichent pas correctement.

Par exemple

● s'affiche comme â

Cependant, si je démarre ensuite un nouveau urxvtdepuis l'intérieur du premier terminal, tout s'affiche correctement.

Il ne semble pas y avoir de différence dans l'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

MISE À JOUR : Il semble que les paramètres régionaux ne soient pas correctement configurés dans le lanceur d'applications pour xfce4, mais il est probable que le shell à l'intérieur du premier terminal ait ses propres paramètres régionaux, ce qui signifie que les deux shells ont les mêmes paramètres régionaux.

ajouter

export LANG=en_GB.UTF-8

à .xinitrc avant le démarrage de xfce4 semble le corriger. Je soupçonne que ce n'est pas la bonne façon, mais cela fonctionne assez bien pour moi.

La capture d'écran montre le problème:

entrez la description de l'image ici

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

sw1nn
la source
Comment démarrez-vous X? Comment démarrer "le premier" terminal? Il semble que l'environnement soit différent pour ces deux-là.
Ярослав Рахматуллин
Essayez d'exécuter à LC_ALL=ru_RU.utf8 urxvtpartir de la session X actuelle. Si les caractères russes (et autres Unicode) sont devenus corrects, vous êtes dans le cas où votre environnement a été exécuté sous l'environnement local C. Vérifiez donc les paramètres régionaux pour xfce. Par exemple, si vous le démarrez, .xinitrcessayez de définir les paramètres régionaux avant de l'exécuter comme LANG=ru_RU.utf8 exec startxfce4.
Alexander I.Grafov
J'ai eu le même problème. Cela était dû à la façon dont je démarrais le startx. Au lieu de faire "exec startx", je faisais "startx" dans mon .zprofile
Samir Sadek

Réponses:

12

Je ne suis pas entièrement certain de la cause du problème, mais les étapes ci-dessous peuvent vous aider:

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

    $ 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. Appliquer les paramètres de .Xdefaults (ou similaire) avant de démarrer le "premier terminal"
    xrdb ~ / .Xdefaults

Ярослав Рахматуллин
la source
C'est certainement à voir avec les paramètres régionaux (voir ma mise à jour de la question), donc accepter cette réponse car elle m'a indiqué la bonne direction. Merci.
sw1nn
Ce n'est généralement pas une mauvaise idée de mettre les paramètres régionaux dans ~ / .bash_profile (~ / .zprofile), mais ~ / .xinitrc fonctionnerait aussi.
Ярослав Рахматуллин
si je me connecte sur un terminal virtuel (c'est-à-dire sans X), tout fonctionne. Le bit de shell fonctionne bien, il est spécifique à X
sw1nn
Probablement parce que X (ou startxfce) est démarré à partir d'un shell sans connexion qui ne lit pas LANG & co à partir d'un profil. Pour bash, ~ / .bashrc peut être utilisé pour définir des éléments pour les shells sans connexion. Mais comme je l'ai dit, il n'y a rien de mal à laisser vos paramètres régionaux et d'autres variables dans ~ / .xinitrc.
Ярослав Рахматуллин
Ce problème peut également affecter tous les caractères car l'espacement des lettres est trop proche. Par exemple, l'ensemble URxvt.letterSpace: -10et tous les personnages s'affichent sous forme de boîtes
DavisDude
0

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

symboles powerline urxvt

Ça ne marchait pas en_US.UTF-8, j'en suis sûr car je peux le reproduire ... maintenant c'est étrange ... mais ça marche maintenant.

la source

sera
la source