Warum werden Unicode-Zeichen nicht richtig gerendert?

19

Hintergrund:

  • Ich habe einige Unicode-Zeichen in meiner Eingabeaufforderung (im Wesentlichen Git-Statusmarkierungen)
  • Ich lasse urxvt unter xfce auf Arch Linux laufen.
  • Ich verwende die DejaVu Sans Mono für Powerline-Schrift, die über die .Xresources-Zeile angegeben wird:

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

Wenn ich urxvt starte, werden die Unicode-Zeichen nicht richtig gerendert.

Beispielsweise

● Rendert als â

Wenn ich dann aber urxvtim ersten Terminal ein neues starte, wird alles korrekt gerendert.

Es scheint keinen Unterschied in der Umgebung zwischen den beiden Terminals zu geben.

Was könnte der Unterschied zwischen dem ersten Aufruf und dem verschachtelten Aufruf sein? Ich vermute, dass die Schriftart in der "äußeren" Instanz nicht korrekt ist, bin mir aber nicht sicher, wie ich die Schriftart eines laufenden X-Fensters überprüfen soll

UPDATE : Es scheint, dass das Gebietsschema im App-Launcher für xfce4 nicht korrekt eingerichtet ist, aber vermutlich befindet sich die Shell im ersten Terminal in ihrem eigenen Gebietsschema, was bedeutet, dass beide Shells dasselbe Gebietsschema haben.

Hinzufügen

export LANG=en_GB.UTF-8

zu .xinitrc, bevor xfce4 gestartet wird, scheint es zu beheben. Ich vermute, dass dies nicht der richtige Weg ist, aber es funktioniert gut genug für mich.

Screenshot zeigt das Problem:

Bildbeschreibung hier eingeben

Hinweis: Ich habe diese Frage von serverfault.com verschoben. Ich hoffe, diese Website ist geeigneter

sw1nn
quelle
Wie starte ich X? Wie startet man "das erste" Terminal? Es scheint, dass die Umgebung für diese beiden unterschiedlich ist.
Ярослав Рахматуллин
Versuchen Sie, LC_ALL=ru_RU.utf8 urxvtvon der aktuellen X-Sitzung aus zu starten . Wenn die russischen Zeichen (und andere Unicode-Zeichen) korrekt sind, können Sie feststellen, dass Ihre Umgebung unter der Ländereinstellung C ausgeführt wurde. Überprüfen Sie daher die Ländereinstellungen für xfce. Wenn Sie beispielsweise gestartet werden, .xinitrcversuchen Sie, das Gebietsschema festzulegen, bevor Sie wie ausgeführt werden LANG=ru_RU.utf8 exec startxfce4.
Alexander I.Grafov
Ich hatte das gleiche problem Es lag an der Art und Weise, wie ich startx gestartet habe. Anstatt "exec startx" zu machen, habe ich "startx" in meinem .zprofile
Samir Sadek

Antworten:

12

Ich bin mir nicht ganz sicher, woran das Problem liegt, aber die folgenden Schritte könnten Abhilfe schaffen:

  1. Vergewissern Sie sich, dass das Gebietsschema ordnungsgemäß eingerichtet ist

    $ locale
    LANG = de_DE.UTF-8
    LC_CTYPE = "de_DE.UTF-8"
    LC_NUMERIC = "de_DE.UTF-8"
    LC_TIME = "de_DE.UTF-8"
    LC_COLLATE = "en_US.UTF-8"
    LC_MONETARY = "de_DE.UTF-8"
    LC_MESSAGES = "de_DE.UTF-8"
    LC_PAPER = "de_DE.UTF-8"
    LC_NAME = "de_DE.UTF-8"
    LC_ADDRESS = "de_DE.UTF-8"
    LC_TELEPHONE = "de_DE.UTF-8"
    LC_MEASUREMENT = "de_DE.UTF-8"
    LC_IDENTIFICATION = "de_DE.UTF-8"
    LC_ALL = de_DE.UTF-8
    
  2. Aktivieren Sie die gewünschten Locales in /etc/locale.gen und führen Sie sie aus locale-gen

    $ cat /etc/locale.gen | grep UTF
    de_DE.UTF-8 UTF-8
    nb_NO.UTF-8 UTF-8
    ru_RU.UTF-8 UTF-8
    
  3. Stellen Sie sicher, dass die gewünschte Schriftart geladen werden kann

    $ xset + fp / usr / share / fonts / cyrillic
    $ fc-cache
    $ fc-liste # zu überprüfen

  4. Übernehmen Sie die Einstellungen aus .Xdefaults (oder ähnlichem), bevor Sie das "erste Terminal" starten
    xrdb ~ / .Xdefaults

Ярослав Рахматуллин
quelle
Dies hat definitiv mit dem Gebietsschema zu tun (siehe mein Update zu der Frage), also akzeptiere diese Antwort, da sie mich in die richtige Richtung wies. Danke.
sw1nn
Normalerweise ist es keine schlechte Idee, Gebietsschemaeinstellungen in ~ / .bash_profile (~ / .zprofile) zu setzen, aber ~ / .xinitrc würde auch funktionieren.
Ярослав Рахматуллин
Wenn ich mich auf einem virtuellen Terminal anmelde (dh ohne X), funktioniert alles. Das Shell-Bit funktioniert
einwandfrei
Wahrscheinlich, weil X (oder startxfce) von einer Nicht-Login-Shell gestartet wird, die LANG & co nicht aus einem Profil liest. Für bash kann ~ / .bashrc verwendet werden, um Inhalte für nicht angemeldete Shells festzulegen. Aber wie gesagt, es ist nichts Falsches daran, die Einstellungen für das Gebietsschema und andere Variablen in ~ / .xinitrc zu belassen.
Ярослав Рахматуллин
Dieses Problem kann sich auch auf alle Zeichen auswirken, da der Buchstabenabstand zu eng ist. Beispielsweise wird festgelegt, URxvt.letterSpace: -10und alle Zeichen werden als Kästchen
angezeigt
0

Für mich war es ein Problem mit Powerline-Glyphen in urxvt. localectl set-locale LANG=en_AU.UTF-8Ich habe gerade herausgefunden, dass das Setzen des Gebietsschemas mit das Problem für mich behebt, zumindest mit der Terminess Powerline-Schriftart (habe noch keine anderen Schriftarten ausprobiert).

Powerline-Symbole

Es hat nicht funktioniert en_US.UTF-8, da bin ich mir ziemlich sicher, dass ich es reproduzieren kann ... das ist seltsam ... aber es funktioniert jetzt.

Quelle

Seren
quelle