Mengapa karakter unicode tidak dirender dengan benar

19

Latar Belakang:

  • Saya memiliki beberapa karakter unicode di prompt saya (penanda status git pada dasarnya)
  • Saya menjalankan urxvt di bawah xfce di arch linux.
  • Saya menggunakan DejaVu Sans Mono untuk font Powerline, ditentukan melalui baris .Xresources:

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

Ketika saya mulai urxvt karakter unicode tidak ditampilkan dengan benar.

Sebagai contoh

● diterjemahkan sebagai â

Namun, jika saya kemudian memulai yang baru urxvtdari dalam terminal pertama semuanya membuat dengan benar.

Tampaknya tidak ada perbedaan dalam lingkungan antara kedua terminal.

Apa yang bisa menjadi perbedaan antara doa pertama dan doa bersarang? Saya menduga font tidak benar dalam contoh 'luar', tapi saya tidak yakin bagaimana memeriksa font dari X windows yang sedang berjalan

UPDATE : Tampaknya lokal tidak diatur dengan benar di peluncur aplikasi untuk xfce4, tetapi mungkin shell di dalam terminal pertama memiliki lokal itu sendiri, yang berarti bahwa kedua shell memiliki lokal yang sama.

menambahkan

export LANG=en_GB.UTF-8

ke .xinitrc sebelum xfce4 dimulai tampaknya untuk memperbaikinya. Saya curiga ini bukan cara yang benar , tetapi itu bekerja cukup baik untuk saya.

tangkapan layar menunjukkan masalah:

masukkan deskripsi gambar di sini

Catatan: Saya memindahkan pertanyaan ini dari serverfault.com - saya harap situs ini lebih tepat

sw1nn
sumber
Bagaimana Anda memulai X? Bagaimana Anda memulai terminal "yang pertama"? Tampaknya lingkungannya berbeda untuk keduanya.
Ярослав Рахматуллин
Cobalah untuk lari LC_ALL=ru_RU.utf8 urxvtdari sesi X saat ini. Jika karakter Rusia (dan Unicode lainnya) menjadi benar, Anda berada dalam kasus ketika lingkungan Anda telah berjalan di bawah C locale. Jadi periksa pengaturan lokal untuk xfce. Misalnya jika Anda memulainya, .xinitrccoba atur lokal sebelum dijalankan seperti LANG=ru_RU.utf8 exec startxfce4.
Alexander I.Grafov
Saya memiliki masalah yang sama. Itu disebabkan oleh cara saya memulai startx. Alih-alih melakukan "exec startx" Saya melakukan "startx" di .zprofile saya
Samir Sadek

Jawaban:

12

Saya tidak sepenuhnya yakin apa penyebab masalahnya, tetapi langkah-langkah di bawah ini mungkin membantu:

  1. Konfirmasikan bahwa lokal sudah diatur dengan benar

    $ lokal
    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. Aktifkan lokal yang diinginkan di /etc/locale.gen dan jalankan 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. Pastikan font yang diinginkan dapat dimuat

    $ xset + fp / usr / share / fonts / cyrillic
    $ fc-cache
    $ fc-list # untuk memeriksa

  4. Terapkan pengaturan dari .Xdefaults (atau serupa) sebelum memulai "terminal pertama"
    xrdb ~ / .Xdefaults

Ярослав Рахматуллин
sumber
Ini pasti berkaitan dengan lokal (lihat pembaruan saya untuk pertanyaan), jadi terima jawaban ini karena mengarahkan saya ke arah yang benar. Terima kasih.
sw1nn
Biasanya bukan ide yang buruk untuk meletakkan pengaturan lokal di ~ / .bash_profile (~ / .zprofile), tetapi ~ / .xinitrc akan bekerja juga.
Ярослав Рахматуллин
jika saya login di terminal virtual (mis. tanpa X) semuanya berfungsi. Bit shell berfungsi dengan baik, khusus untuk X
sw1nn
Mungkin karena X (atau startxfce) dimulai dari shell non-login yang tidak membaca LANG & co dari profil. Untuk bash, ~ / .bashrc dapat digunakan untuk mengatur hal-hal untuk shell non-login. Tapi seperti saya katakan, tidak ada yang salah dengan meninggalkan pengaturan lokal Anda dan variabel lain di ~ / .xinitrc.
Ярослав Рахматуллин
Masalah ini juga dapat mempengaruhi semua karakter karena jarak huruf terlalu dekat. Misalnya, set URxvt.letterSpace: -10dan semua karakter ditampilkan sebagai kotak
DavisDude
0

Bagi saya itu adalah masalah dengan mesin terbang powerline di urxvt. Baru tahu bahwa mengatur lokal dengan localectl set-locale LANG=en_AU.UTF-8perbaikan masalah untuk saya, dengan font terminess powerline setidaknya (belum mencoba font lain)

simbol urxvt powerline

Itu tidak berhasil en_US.UTF-8, saya cukup yakin karena saya dapat mereproduksinya ... sekarang itu aneh ... tetapi sekarang berfungsi.

sumber

serum
sumber