เหตุใดอักขระ unicode จึงแสดงผลไม่ถูกต้อง


19

พื้นหลัง:

  • ฉันมีอักขระยูนิโค้ดบางตัวในพรอมต์ของฉัน (เครื่องหมายสถานะ git เป็นหลัก)
  • ฉันใช้ urxvt ภายใต้ xfce บน arch linux
  • ฉันใช้ DejaVu Sans Mono สำหรับแบบอักษร Powerline ที่ระบุผ่านทาง. Xresources line:

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

เมื่อฉันเริ่ม urxvt อักขระ Unicode ไม่สามารถแสดงได้อย่างถูกต้อง

ตัวอย่างเช่น

●แสดงผลเป็น

อย่างไรก็ตามถ้าฉันเริ่มต้นใหม่urxvtจากภายใน terminal แรกทุกอย่างแสดงผลอย่างถูกต้อง

ดูเหมือนว่าจะไม่มีความแตกต่างในสภาพแวดล้อมระหว่างสองขั้ว

อะไรคือความแตกต่างระหว่างการเรียกใช้ครั้งแรกกับการเรียกใช้แบบซ้อน ฉันสงสัยว่าแบบอักษรไม่ถูกต้องในอินสแตนซ์ 'outer' แต่ฉันไม่แน่ใจว่าจะตรวจสอบแบบอักษรของหน้าต่าง X ที่กำลังทำงานอยู่ได้อย่างไร

อัปเดต : ดูเหมือนว่าสถานที่ตั้งไม่ถูกต้องในตัวเรียกใช้งานแอปสำหรับ xfce4 แต่น่าจะเป็นเชลล์ภายในเทอร์มินัลแรกที่ระบุว่าเป็นโลแคลของตัวเองซึ่งหมายความว่าเชลล์ทั้งสองมีโลแคลเดียวกัน

เพิ่ม

export LANG=en_GB.UTF-8

เพื่อ. xincex ก่อนที่จะเริ่ม xfce4 ดูเหมือนว่าจะแก้ไข ฉันสงสัยว่านี่ไม่ใช่วิธีที่ถูกต้องแต่ใช้งานได้ดีพอสำหรับฉัน

สกรีนช็อตแสดงให้เห็นถึงปัญหา:

ป้อนคำอธิบายรูปภาพที่นี่

หมายเหตุ: ฉันย้ายคำถามนี้จาก serverfault.com - ฉันหวังว่าไซต์นี้จะเหมาะสมกว่า


คุณจะเริ่ม X ได้อย่างไร คุณจะเริ่มต้นเทอร์มินัล "แรก" ได้อย่างไร ดูเหมือนว่าสภาพแวดล้อมจะแตกต่างกันสำหรับสองคนนี้
ЯрославРахматуллин

ลองเรียกใช้LC_ALL=ru_RU.utf8 urxvtจากเซสชัน X ปัจจุบัน หากตัวอักษรรัสเซีย (และ Unicode อื่น) ตัวอักษรถูกต้องคุณอยู่ในกรณีที่สภาพแวดล้อมของคุณทำงานภายใต้ภาษา C xfceเพื่อตรวจสอบการตั้งค่าสถานที่สำหรับ ตัวอย่างเช่นถ้าคุณจะเริ่มต้นในการพยายามที่จะสถานชุดก่อนที่ทำงานเหมือน.xinitrc LANG=ru_RU.utf8 exec startxfce4
Alexander I.Grafov

ผมมีปัญหาเดียวกัน. มันเกิดจากวิธีที่ฉันเริ่ม startx แทนที่จะทำ "exec startx" ฉันกำลังทำ "startx" ในไฟล์. profile
Samir Sadek

คำตอบ:


12

ฉันไม่แน่ใจว่าสาเหตุของปัญหาคืออะไร แต่ขั้นตอนด้านล่างอาจช่วยได้:

  1. ยืนยันว่าสถานที่ตั้งค่าถูกต้อง

    $ 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. เปิดใช้งานโลแคลที่ต้องการใน /etc/locale.gen และเรียกใช้ 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. ตรวจสอบให้แน่ใจว่าสามารถโหลดแบบอักษรที่ต้องการได้

    $ xset + fp / usr / share / fonts / cyrillic
    $ fc-cache
    $ fc-list # เพื่อตรวจสอบ

  4. ใช้การตั้งค่าจาก. Xdefaults (หรือคล้ายกัน) ก่อนที่จะเริ่ม "เทอร์มินัลแรก"
    xrdb ~ / .Xdefaults


นี่เป็นเรื่องเกี่ยวกับสถานที่แน่นอน (ดูการอัปเดตคำถามของฉัน) ดังนั้นยอมรับคำตอบนี้เพราะชี้ไปในทิศทางที่ถูกต้อง thnks
sw1nn

โดยทั่วไปแล้วมันไม่ได้เป็นความคิดที่ดีที่จะตั้งค่าภาษาใน ~ / .bash_profile (~ / .zprofile) แต่ ~ / .xinitrc ก็ใช้ได้เช่นกัน
ЯрославРахматуллин

ถ้าฉันเข้าสู่ระบบบน terminal เสมือน (เช่น. โดยไม่ต้อง X) มันทำงานได้ทั้งหมด เชลล์บิตทำงานได้ดีโดยเฉพาะกับ X
sw1nn

อาจเป็นเพราะ X (หรือ startxfce) เริ่มต้นจากเชลล์ที่ไม่ใช่การเข้าสู่ระบบที่ไม่ได้อ่าน LANG & co จากโปรไฟล์ สำหรับ bash สามารถใช้ ~ / .bashrc เพื่อตั้งค่ารายการสำหรับเชลล์ที่ไม่ได้ลงชื่อเข้าใช้ แต่อย่างที่ฉันบอกไว้ไม่มีอะไรผิดปกติหากปล่อยให้การตั้งค่าโลแคลของคุณและตัวแปรอื่น ๆ
ЯрославРахматуллин

ปัญหานี้อาจส่งผลกระทบต่ออักขระทั้งหมดเนื่องจากระยะห่างระหว่างตัวอักษรอยู่ใกล้เกินไป ตัวอย่างเช่นชุดURxvt.letterSpace: -10และตัวละครทั้งหมดแสดงเป็นกล่อง
DavisDude

0

สำหรับฉันมันเป็นปัญหากับ powerline glyphs ใน urxvt เพิ่งค้นพบว่าการตั้งค่าภาษาด้วยการlocalectl set-locale LANG=en_AU.UTF-8แก้ไขปัญหาให้ฉันด้วยตัวอักษร powerline terminess อย่างน้อย (ยังไม่ได้ลองแบบอักษรอื่น ๆ )

สัญลักษณ์ powerline urxvt

มันไม่ได้ทำงานด้วยen_US.UTF-8ฉันค่อนข้างแน่ใจเพราะฉันสามารถทำซ้ำได้ ... ตอนนี้มันแปลก ... แต่ตอนนี้ทำงานได้

แหล่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.