จะแก้ไข PuTTY ที่แสดงตัวอักษรที่อ่านไม่ออกได้อย่างไร


76

การเชื่อมต่อจากพีซี Windows 7 ผ่าน SSH ไปยังเซิร์ฟเวอร์ Ubuntu โดยใช้PuTTYฉันได้รับข้อผิดพลาดของหน้าจอ:

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

คือ:

  • "Double-draws" การเลือกในMidnight Commander (MC)
  • อักขระอื่น ๆ เช่นองค์ประกอบของเส้นจะถูกวาดเป็นอักขระที่ไม่ถูกต้อง (เช่น "â" แทนที่จะเป็น "|")

ฉันเชื่อมต่อกับเซิร์ฟเวอร์ Ubuntu เดียวกันกับเทอร์มินัลและ SHH จาก Mac OS X และไม่ได้รับหน้าจอสับสน (เช่นทุกอย่างดูและทำงานได้อย่างถูกต้อง) ฉันได้ลองเล่นด้วยการตั้งค่าแบบอักษรภายใน PuTTY แล้วเปลี่ยนจาก Courier New เป็น Consolas แต่ไม่มีโชค

คำถามของฉันคือ:

วิธีการกำหนดค่า PuTTY ให้แสดงอักขระพิเศษอย่างถูกต้องและไม่วาดเส้น / เขียนทับเส้นคู่หน้าจอ?


1
ด้วย SecureCRT: เลือกตัวเลือก -> ตัวเลือกเซสชัน -> เทอร์มินัล -> การปรากฏ - การเข้ารหัสอักขระ -> เลือก: UTF-8 หวังว่าจะช่วยคนอื่นเช่นฉัน!
Vunb

คำตอบ:


72

คุณเกือบจะแน่นอนได้ตั้งชุดตัวอักษรที่ไม่ถูกต้องในการตั้งค่าการฉาบของคุณ

ตรวจสอบชุดอักขระบนระบบรีโมตโดยการรันคำสั่ง:

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="de_DE.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=

ดังนั้นตรวจสอบการตั้งค่า PuTTY ของคุณภายใต้การแปลและตรวจสอบให้แน่ใจว่าคุณได้UTF-8ตั้งค่าเป็นชุดอักขระ

การกำหนดค่า PuTTY ใหม่

คุณอาจต้องปรับแต่งการตั้งค่าการวาดเส้นด้วย แต่อาจไม่น่าเป็นไปได้


14
ไม่เพียงพอในทุกกรณี คุณควรส่งออกตัวแปรดังต่อไปนี้ไปยังสภาพแวดล้อมของคุณ: NCURSES_NO_UTF8_ACS=1 [more info ]
Piotr Jurkiewicz

2
ในกรณีที่localeส่งคืนPOSIXคุณอาจปิดใช้งาน usePAM ในการกำหนดค่า sshd
2693017

4
หากโลแคลส่งคืนสิ่งที่ต้องการPOSIXให้ออกupdate-locale LANG=en_US.utf8ที่บรรทัดคำสั่ง - ดูthomas-krenn.com/de/wiki/Locales_unter_Ubuntu_konfigurieren
koppor

@ michael-hampton ระบบของฉันถูกกำหนดค่าให้ใช้ en_US.UTF-8 ฉันเห็นว่าสถานที่ต่างพูดถึงสิ่งต่าง ๆ เกี่ยวกับสถานที่ บางสถานที่พูดถึงฉันควรใช้ en_US ในขณะที่สถานที่อื่นพูดถึงฉันควรใช้ de_DE ฉันเห็นก่อนหน้า grep และอุปกรณ์หลักอื่น ๆ ใช้ locale เพื่อตั้งค่าชุดอักขระฉันเชื่อ อะไรคือความหมายของการเปลี่ยนแปลงสิ่งนี้?
alpha_989

@koppor คุณพูดถึงการเปลี่ยนสถานที่เกิดเหตุเป็น en_US ในขณะที่ไมเคิลพูดถึงสถานที่เกิดเหตุเปลี่ยนเป็น de_DE อันไหนที่ถูก?
alpha_989

34

ฉันมีปัญหากับaptitudeโปรแกรมของ Debian แม้ว่าฉันจะมี UTF-8 ตามที่ตัวละครของฉันตั้งไว้ สิ่งที่ใช้ได้ผลสำหรับฉันคือการตั้งค่า 'การเชื่อมต่อ> ข้อมูล>' สตริงประเภทเทอร์มินัล 'เป็น' สีโป๊ว 'แทน' xterm '- เห็นได้ชัดว่า Putty ละเว้นลำดับอักขระเพื่อเปลี่ยนเป็นโหมดวาดภาพ: http: //www.chiark.greenend .org.uk / ~ sgtatham / ฉาบ / สิ่งที่ปรารถนา / utf8 บวก vt100.html

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


2
ยอดเยี่ยม ง่ายและใช้งานได้ (อย่างน้อยก็ทำบน Debian / Ubuntu)
เนตร

1
วิธีนี้ใช้งานได้ดี (บน PuTTY) แต่จากนั้นจะแนะนำปัญหาอื่นอีก (เล็กน้อยกว่า): การเปลี่ยนชื่อหน้าต่างควบคุมจากระยะไกลไม่ทำงานอีกต่อไป
ADTC

ยอดเยี่ยม แก้ไขปัญหาสำหรับ ncmpc บน Ubuntu Artful
weberjn


8

ปัจจัยพื้นฐานสองประการคือ Window / Translation UTF-8 ในการตั้งค่า putty และ locale ใน Linux ตามคำแนะนำที่นี่และที่อื่น ๆ

นอกจากนี้ยังอาจช่วยในการฉาบการตั้งค่าการเชื่อมต่อ / ข้อมูล / เทอร์มิประเภทสตริงฉาบและ / export NCURSES_NO_UTF8_ACS=1หรือในลินุกซ์ ทั้งสองนี้ยังกล่าวถึงสถานที่หลายแห่ง

แต่: คุณยังอาจได้รับบล็อคสำหรับตัวละครบางตัวเนื่องจากแบบอักษรเริ่มต้นเช่น Courier และ Lucida Console ไม่มีตัวอักษร Unicode ทั้งหมด ดาวน์โหลดและติดตั้งhttp://dejavu-fonts.org/wiki/Downloadและตั้งค่า putty เพื่อใช้งาน

เคล็ดลับสุดท้ายนี้เป็นสิ่งจำเป็นสำหรับฉันที่จะได้รับnoping(แนะนำ!) เพื่อแสดงตัวอักษรกราฟิกทั้งหมด


2
export NCURSES_NO_UTF8_ACS=1ทำงานได้ดีที่สุดสำหรับฉัน ฉันต้องจำไว้ว่าให้ใช้-Eตัวเลือกsudoเมื่อฉันเรียกใช้iftopเพื่อให้การตั้งค่าสภาพแวดล้อมนั้น sudo -E iftop
HeatfanJohn

5

ในกรณีของฉัน (Ubuntu 14.04) ปัญหาเกิดจากการหายไป

UsePAM yes    

รายการใน / etc / ssh / sshd_config เป็น /etc/pam.d/sshd การกำหนดค่า pam รับผิดชอบโดยค่าเริ่มต้นสำหรับการโหลด / etc / default / locale ในสภาพแวดล้อมของผู้ใช้


สิ่งนี้แก้ไขได้สำหรับฉัน
Martin

5

สำหรับพวก VMS เก่า ๆ ที่น่าสงสารทุกคนที่อยู่ที่นี่:

พุตตี้→หน้าต่าง→การแปล→ชุดอักขระระยะไกล→ DEC-MCS

ทำงานให้ฉัน


4

ฉันกำลังมองหาวิธีแก้ปัญหามากมายเมื่อใช้เครื่อง Docker (ทั้งภาษาและบนเครื่องที่ตั้งค่าโดยผู้ดูแลระบบ) ใน Putty ของฉันทุกอย่างดี (ฉันมีUTF-8) ฉันใช้ไคลเอนต์ SSH อื่น ๆ และมีปัญหาเดียวกันแน่นอน

วิ่ง:

mc -ac

กำลังแก้ปัญหา (แต่ไม่สมบูรณ์) และฉันกำลังมองหาวิธีการแก้ปัญหาที่สมบูรณ์

หลังจากอ่านคำแนะนำหลายอย่างแล้วในที่สุดฉันก็พบคำตอบที่แก้ไขปัญหาของฉันได้

ในเทอร์มินัลเมื่อคุณเรียกใช้:

locale

ตรวจสอบสถานที่ที่คุณตั้งไว้ ฉันมีตามCตำแหน่งที่ตั้งเริ่มต้น

เพื่อตรวจสอบสถานที่ติดตั้งทั้งหมดทำงาน locale -a

ฉันมีตัวอย่าง:

C
C.UTF-8
POSIX

โดยค่าเริ่มต้น.

การแก้ปัญหาคือการส่งออกLANGตัวแปรที่มีC.UTF-8สถานที่เช่น:

export LANG="C.UTF-8"

เห็นได้ชัดว่าคุณสามารถเพิ่มลงใน.bashrcเพื่อให้มันตั้งค่าโดยอัตโนมัติในโปรไฟล์ของคุณ


ผลข้างเคียงของการเปลี่ยนตัวแปร LANG คืออะไร หากคุณมี C.UTF-8 เป็น LANG แล้วทำไมส่งออกอีกครั้ง
alpha_989

2

อีกเหตุผลหนึ่งที่เกี่ยวข้องกับ pam ที่อาจส่งผลกระทบต่อโฮสต์ที่มีการรับรองความถูกต้อง powerbroker / pbis / เช่นเดียวกัน

grep /etc/pam.d สำหรับการเกิด "lsass":

grep -r lsass /etc/pam.d

หากคุณเห็นในผลลัพธ์ที่ชอบ:

/etc/pam.d/common-session:session       sufficient        pam_lsass.so

อาจเป็นสาเหตุของปัญหา การแก้ไขอย่างรวดเร็วคือการแทนที่ "เพียงพอ" ด้วย "ตัวเลือก" ถัดจากโมดูล pam_lsass ดังนั้นจึงดูเหมือนว่า:

/etc/pam.d/common-session:session       optional        pam_lsass.so

/etc/pam.d/common-session (หรือไฟล์อื่น ๆ ที่มีรายการที่คล้ายกัน - อาจมีไม่กี่ไฟล์) อาจรวมอยู่ใน /etc/pam.d/sshd ก่อนที่จะโหลด pam_env ดังนั้นหากการประมวลผลโมดูล pam เสร็จสิ้น ก่อนที่จะมาถึง pam_env นั้นจะไม่มีการโหลด / etc / default / locale ในสภาพแวดล้อมของผู้ใช้และคุณมีอักขระที่อ่านไม่ออก


2

หลังจาก 15 ปีฉันรู้สึกรำคาญอีกครั้งและ googled รอบอีกครั้งพบสิ่งนี้เลือก

เปลี่ยนการตั้งค่า→หน้าต่าง→การแปล→การตั้งค่าถ่านระยะไกล→ "ใช้การเข้ารหัสแบบอักษร"

และนั่นก็แก้ไขมัน


2

ฉันต้องตั้งค่าบนหน้าWindowTranslationตัวละครที่ถูกตั้งค่าเป็น:

ISO-8859-1: 1998 (ละติน -1 ยุโรปตะวันตก)

จากนั้นและเมื่อนั้นอักขระที่มีเส้นแนวยาวก็ปรากฏขึ้นอย่างถูกต้อง


1

ใช้ mc ด้วยวิธีนี้ (ตั้งค่าภาษาเป็น en) ใช้ได้สำหรับฉัน:

$ LC_ALL=en mc

1

สิ่งที่ใช้ได้ผลสำหรับฉันคือ "การเชื่อมต่อข้อมูลเทอร์มินัลชนิดสตริง = ansi" บวก "หน้าต่างการแปลชุดอักขระระยะไกล = ใช้การเข้ารหัสแบบอักษร" จากนั้นset TERM=ansiที่ด้าน unix

PS อย่าลืมปิดอัญประกาศอัจฉริยะหากคุณถูกบังคับให้ใช้ MS-Word


1
คุณควรพูดถึงว่าคุณไม่ได้เชื่อมต่อกับระบบ LInux ที่ทันสมัย ​​แต่เป็นระบบที่ไม่ใช่ Linux รุ่นเก่า
Michael Hampton

1

ปัญหาของฉันคือสีโป๊วมีการกำหนดค่าเป็น UTF-8 แต่ระบบระยะไกลเป็น ISO-8859-1

ยุโรปตะวันตกดังนั้นฉันจึงเปลี่ยนสิ่งที่เป็นสีโป๊วและสิ่งใดก็ได้ที่ทำงานได้ดี

ภาพหน้าจอสีโป๊ว

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