ssh backspace ลบหนึ่งอักขระแทนสองตัว (สัญลักษณ์ utf-8)


2

ฉันกำลังเข้าถึงคอมพิวเตอร์ระยะไกลโดยใช้ ssh และใช้คำสั่ง bash เพื่อใส่สัญลักษณ์โดยใช้สตรีมอินพุตมาตรฐาน:

อ่านการทดสอบ echo $ test

การป้อนตัวอักษรภาษาอังกฤษและใช้ backspace เพื่อลบออกจากนั้นจึงป้อนตัวอักษรอื่น ๆ แล้ววนซ้ำขั้นตอนนี้ทุกครั้ง แต่มันกลายเป็นหายนะเมื่อฉันใช้สัญลักษณ์ utf-8 อื่น ๆ เช่นสัญลักษณ์รัสเซียซึ่งต้องใช้ 2 ไบต์แทน 1 เช่นที่คนอังกฤษใช้ เช่นฉันใส่:

абвгдежз

หลังจากนั้นฉันใช้ backspace 8 ครั้งแล้วใส่สัญลักษณ์อื่น ๆ :

привет

และกดปุ่ม Enter แต่แทนที่จะเป็นผลลัพธ์ที่จะเท่ากับข้อมูลล่าสุดของฉันฉันได้รับต่อไปนี้:

абвгпривет

ซึ่งหมายความว่า 8 backspace ลบเพียง 4 สัญลักษณ์

ฉันใช้ Linux linux ubuntu 12.04 พยายามใช้คอนโซลที่แตกต่าง: หนึ่งมาตรฐานเทอร์มินอล ตัวเลือก Backspace ประเภทต่างๆ (เช่น ASCII-del หรือ Ctrl + H) ตั้งค่า $ LC_TYPE เป็น ru_RU.UTF-8 แต่ไม่มีอะไรทำงาน ไม่มีปัญหาดังกล่าวโดยใช้คอนโซลท้องถิ่น ขอบคุณล่วงหน้า.

อัปเดต: ฉันยังมีวิดีโอของปัญหานี้โปรดดูได้ที่ youtube

คำตอบ:


2

คุณสามารถหลีกเลี่ยงปัญหานี้ได้ด้วยการวิ่ง

stty iutf8

บนเซิร์ฟเวอร์ทุกครั้งที่คุณมี น่าเสียดายที่ข้อผิดพลาดนี้มีมาตั้งแต่ปี 2005 ลองดูรายละเอียดเพิ่มเติมจากกระดานสนทนาเดเบียน คุณอาจต้องการเพิ่มบรรทัดนี้ที่ท้ายไฟล์. bashrc ของคุณ


2

คุณจะต้องตั้งLC_CTYPEให้เป็น UTF-8 สถานที่เช่นหรือru_RU.UTF-8 คุณสามารถแสดงรายการสถานที่มีการใช้en_US.UTF-8locale -a


ขอบคุณสำหรับการตอบกลับของคุณ. ฉันได้รับ $ LC_TYPE ตั้งไว้แล้วเป็น ru_RU.UTF-8 ทั้งในฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์ น่าเศร้าที่ไม่ได้แก้ปัญหา

@VsevolodAvramov คุณลองใช้exportตัวแปรนั้นหรือไม่? และ: คุณตั้งเมื่อไหร่? ถ้าคุณตั้งค่าไว้ในเปลือกมันอาจจะสายเกินไป ...
glglgl

@glglgl ฉันได้รับการกำหนดค่าต่อไปนี้: 1) บรรทัดแรกของ ~ / .ssh / config คือ: โฮสต์ * SendEnv LC_ * 2) คำสั่ง AcceptEnv มีอยู่ในการกำหนดค่าเซิร์ฟเวอร์ที่ / etc / ssh / sshd_config 3) บรรทัดแรก ของ ~ / .bashrc ทั้งบนไคลเอนต์และเซิร์ฟเวอร์คือการส่งออก LC_CTYPE = ru_RU.utf8 4) locale -a แสดง ru_RU.utf8 ในรายการตัวเลือกที่มีสำหรับโลแคล มีแนวคิดอื่นอีกไหม? ขอบคุณ

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