¿Por qué los caracteres Unicode no se representan correctamente?

19

Antecedentes:

  • Tengo algunos caracteres Unicode en mi solicitud (esencialmente marcadores de estado de git)
  • Estoy ejecutando urxvt bajo xfce en arch linux.
  • Estoy usando DejaVu Sans Mono para la fuente Powerline, especificada a través de la línea .Xresources:

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

Cuando comienzo urxvt, los caracteres unicode no se representan correctamente.

Por ejemplo

● se muestra como â

Sin embargo, si empiezo una nueva urxvtdesde el primer terminal, todo se representa correctamente.

No parece haber ninguna diferencia en el entorno entre los dos terminales.

¿Cuál podría ser la diferencia entre la primera invocación y la invocación anidada? Sospecho que la fuente no es correcta en la instancia 'externa', pero no estoy seguro de cómo verificar la fuente de una ventana X en ejecución

ACTUALIZACIÓN : Parece que la configuración regional no está configurada correctamente en el iniciador de aplicaciones para xfce4, pero presumiblemente la carcasa dentro del primer terminal se encuentra en su propia configuración regional, lo que significa que ambas capas tienen la misma configuración regional.

agregando

export LANG=en_GB.UTF-8

a .xinitrc antes de que se inicie xfce4 parece solucionarlo. Sospecho que esta no es la forma correcta , pero funciona lo suficientemente bien para mí.

La captura de pantalla demuestra el problema:

ingrese la descripción de la imagen aquí

Nota: moví esta pregunta desde serverfault.com, espero que este sitio sea más apropiado

sw1nn
fuente
¿Cómo comienzas X? ¿Cómo se inicia "la primera" terminal? Parece que el entorno es diferente para estos dos.
Ярослав Рахматуллин
Intenta correr LC_ALL=ru_RU.utf8 urxvtdesde la sesión X actual. Si los caracteres rusos (y otros Unicode) se volvieron correctos, está en caso de que su entorno se haya estado ejecutando en C locale. Por lo tanto, compruebe la configuración regional para xfce. Por ejemplo, si lo ha iniciado, .xinitrcintente establecer la configuración regional antes de ejecutar como LANG=ru_RU.utf8 exec startxfce4.
Alexander I.Grafov
Yo tuve el mismo problema. Fue causado por la forma en que estaba iniciando el startx. En lugar de hacer "exex startx" estaba haciendo "startx" en mi .zprofile
Samir Sadek

Respuestas:

12

No estoy completamente seguro de cuál es la causa del problema, pero los pasos a continuación pueden ayudar:

  1. Confirme que la configuración regional está configurada correctamente

    $ 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 = "es_ES.UTF-8"
    LC_MEASUREMENT = "en_US.UTF-8"
    LC_IDENTIFICATION = "en_US.UTF-8"
    LC_ALL = en_US.UTF-8
    
  2. Habilite las configuraciones regionales deseadas en /etc/locale.gen y ejecute 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. Asegúrese de que se pueda cargar la fuente deseada

    $ xset + fp / usr / share / fonts / cirílico
    $ fc-cache
    $ fc-list # para verificar

  4. Aplique la configuración de .Xdefaults (o similar) antes de iniciar el "primer terminal"
    xrdb ~ / .Xdefaults

Ярослав Рахматуллин
fuente
Esto definitivamente tiene que ver con la configuración regional (ver mi actualización de la pregunta), por lo que aceptar esta respuesta ya que me indicó la dirección correcta. Gracias.
sw1nn
Por lo general, no es una idea terrible poner la configuración regional en ~ / .bash_profile (~ / .zprofile), pero ~ / .xinitrc también funcionaría.
Ярослав Рахматуллин
Si inicio sesión en un terminal virtual (es decir, sin X), todo funciona. El bit de shell funciona bien, es específico de X
sw1nn
Probablemente porque X (o startxfce) se inicia desde un shell sin inicio de sesión que no lee LANG & co desde un perfil. Para bash, ~ / .bashrc se puede usar para configurar cosas para shells sin inicio de sesión. Pero como dije, no hay nada de malo en dejar la configuración regional y otras variables en ~ / .xinitrc.
Ярослав Рахматуллин
Este problema también puede afectar a todos los caracteres debido a que el espacio entre letras está demasiado cerca. Por ejemplo, establecer URxvt.letterSpace: -10y todos los caracteres se muestran como cuadros
DavisDude
0

Para mí fue un problema con los glifos de línea eléctrica en urxvt. localectl set-locale LANG=en_AU.UTF-8Me acabo de enterar de que configurar la configuración regional soluciona el problema para mí, con la fuente powerline terminess al menos (no he probado otras fuentes)

símbolos de línea eléctrica urxvt

No funcionaba en_US.UTF-8, estoy bastante seguro porque puedo reproducirlo ... ahora eso es extraño ... pero funciona ahora.

fuente

sera
fuente