Tại sao các ký tự unicode không hiển thị chính xác


19

Lý lịch:

  • Tôi có một số ký tự unicode trong dấu nhắc của mình (về cơ bản đánh dấu trạng thái git)
  • Tôi đang chạy urxvt dưới xfce trên arch linux.
  • Tôi đang sử dụng DejaVu Sans Mono cho phông chữ Powerline, được chỉ định qua dòng .Xresource:

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

Khi tôi bắt đầu urxvt, các ký tự unicode không hiển thị chính xác.

Ví dụ

● ám chỉ là â

Tuy nhiên, nếu sau đó tôi bắt đầu một cái mới urxvttừ bên trong thiết bị đầu cuối thì mọi thứ sẽ hiển thị chính xác.

Dường như không có sự khác biệt nào về môi trường giữa hai thiết bị đầu cuối.

Điều gì có thể là sự khác biệt giữa lần gọi đầu tiên và lần gọi lồng nhau? Tôi nghi ngờ phông chữ không chính xác trong trường hợp 'bên ngoài', nhưng tôi không chắc cách kiểm tra phông chữ của cửa sổ X đang chạy

CẬP NHẬT : Có vẻ như miền địa phương không được thiết lập chính xác trong trình khởi chạy ứng dụng cho xfce4, nhưng có lẽ lớp vỏ bên trong thiết bị đầu cuối đầu vào là ngôn ngữ riêng, có nghĩa là cả hai vỏ đều có cùng miền.

thêm

export LANG=en_GB.UTF-8

đến .xinitrc trước khi xfce4 được khởi động dường như để sửa nó. Tôi nghi ngờ đây không phải là cách chính xác , nhưng nó hoạt động đủ tốt với tôi.

ảnh chụp màn hình cho thấy vấn đề:

nhập mô tả hình ảnh ở đây

Lưu ý: Tôi đã chuyển câu hỏi này từ serverfault.com - tôi hy vọng trang web này phù hợp hơn


Làm thế nào để bạn bắt đầu X? Làm thế nào để bạn bắt đầu thiết bị đầu cuối "đầu tiên"? Có vẻ như môi trường là khác nhau cho hai.
Ярос mặc dù chúng tôi làm việc vào

Cố gắng chạy LC_ALL=ru_RU.utf8 urxvttừ phiên X hiện tại. Nếu ký tự tiếng Nga (và các ký tự Unicode khác) trở thành chính xác, bạn sẽ gặp trường hợp môi trường của bạn đang chạy dưới ngôn ngữ C. Vì vậy, kiểm tra cài đặt ngôn ngữ cho xfce. Ví dụ: nếu bạn đã bắt đầu, .xinitrchãy thử đặt ngôn ngữ trước khi chạy như thế nào LANG=ru_RU.utf8 exec startxfce4.
Alexander I.Grafov

Tôi đã từng gặp vấn đề tương tự. Nó được gây ra bởi cách tôi đã bắt đầu startx. Thay vì thực hiện "exec startx", tôi đã thực hiện "startx" trong .zprofile của mình
Samir Sadek

Câu trả lời:


12

Tôi không hoàn toàn chắc chắn nguyên nhân của vấn đề là gì, nhưng các bước dưới đây có thể giúp:

  1. Xác nhận rằng miền địa phương được thiết lập đúng

    $ miền địa phương
    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. Kích hoạt các địa điểm mong muốn trong /etc/locale.gen và chạy locale-gen

    $ cat /etc/locale.gen | grep UTF
    vi_US.UTF-8 UTF-8
    nb_NO.UTF-8 UTF-8
    ru_RU.UTF-8 UTF-8
    
  3. Đảm bảo rằng phông chữ mong muốn có thể được tải

    $ xset + fp / usr / share / phông chữ / cyrillic
    $ fc-bộ đệm
    $ fc-list # để kiểm tra

  4. Áp dụng các cài đặt từ .Xdefaults (hoặc tương tự) trước khi bắt đầu "thiết bị đầu cuối đầu tiên"
    xrdb ~ / .Xdefaults


Điều này chắc chắn là để làm với miền địa phương (xem bản cập nhật của tôi cho câu hỏi), vì vậy chấp nhận câu trả lời này vì nó chỉ cho tôi đi đúng hướng. Thnks.
sw1nn

Nó thường không phải là một ý tưởng khủng khiếp để đặt cài đặt ngôn ngữ trong ~ / .bash_profile (~ / .zprofile), nhưng ~ / .xinitrc cũng sẽ hoạt động.
Ярос mặc dù chúng tôi là

nếu tôi đăng nhập vào một thiết bị đầu cuối ảo (tức là không có X) thì tất cả đều hoạt động. Bit shell đang hoạt động tốt, nó đặc trưng cho X
sw1nn

Có lẽ bởi vì X (hoặc startxfce) được bắt đầu từ trình bao không đăng nhập không đọc LANG & co từ một hồ sơ. Đối với bash, ~ / .bashrc có thể được sử dụng để đặt nội dung cho trình bao không đăng nhập. Nhưng như tôi đã nói, không có gì sai khi để các cài đặt ngôn ngữ của bạn và các biến khác trong ~ / .xinitrc.
Ярослав Рахматуллин

Vấn đề này cũng có thể ảnh hưởng đến tất cả các ký tự do khoảng cách chữ quá gần. Chẳng hạn, đặt URxvt.letterSpace: -10và tất cả các ký tự hiển thị dưới dạng hộp
DavisDude

0

Đối với tôi đó là một vấn đề với glyphs powerline trong urxvt. Chỉ cần phát hiện ra rằng cài đặt ngôn ngữ đã localectl set-locale LANG=en_AU.UTF-8khắc phục sự cố cho tôi, với phông chữ powerline hạn chế ít nhất (chưa thử các phông chữ khác)

biểu tượng powerline urxvt

Nó không hoạt động với en_US.UTF-8, tôi khá chắc chắn vì tôi có thể tái tạo nó ... bây giờ thật lạ ... nhưng nó hoạt động ngay bây giờ.

nguồn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.