(เอาเกลือไปนิดหน่อย) เท่าที่ฉันจำได้ปัญหาอยู่ที่การlibiconv
ทำงาน การเข้ารหัสหลายไบต์ต้องใช้เครื่องรัฐในการถอดรหัสและlibiconv
ต้องการรับอักขระทั้งหมดดังนั้นคุณจึงไม่สามารถให้อักขระครึ่งตัวในการเรียกฟังก์ชันหนึ่งและอีกครึ่งหนึ่งในถัดไป
ฉันคิดว่าอีกสองวิธีแก้ปัญหาวิธีหนึ่งเป็นวิธีที่ดีนอกวงอีกวิธีหนึ่งคือการแฮ็กในวง
เปลี่ยนการเข้ารหัสเทอร์มินัลอีมูเลเตอร์ (out-of-band) : หนึ่งคือการเปลี่ยนการเข้ารหัสอักขระในเทอร์มินัลอีมูเลเตอร์ของคุณดังนั้นการเข้ารหัสเนทีฟจึงเป็น Shift JIS ฉันเพิ่งตรวจสอบkonsole
และรองรับสิ่งนี้ จากเมนูดู→การเข้ารหัสอักขระ→ Japenese → sjis จากนั้นคุณสามารถเพียงแค่tail -f
ไฟล์และkonsole
จะดูแลการถอดรหัสอักขระหลายไบต์และจับคู่พวกเขาจนถึงตัวอักษรร่ายมนตร์
การเข้ารหัสเทอร์มินัล Transcode ในทันที (ในวงดนตรี; ดีที่สุด) : ความอนุเคราะห์จาก Gilles ที่ทำให้ฉันนึกถึงluit
หลังจากผ่านไปนานมาก ใช้luit
ซึ่งควรมาพร้อมกับการกระจาย XOrg ของคุณ (บน Debian มันเป็นแพ็คเกจx11-utils
) ใช้มันแบบนี้:
$ luit -encoding SJIS -- tail -f x
นี้จะทำให้ SJIS แปลงขั้ว / จากการเข้ารหัส terminal tail -f x
ของคุณและการทำงาน ข้อเสียของluit
libiconv
ก็คือว่ามันไม่สนับสนุนความมั่งคั่งของการเข้ารหัสการสนับสนุนโดย ข้อเสียคือมันมีอยู่เกือบทุกที่
การเข้ารหัสเทอร์มินัล Transcode ในทันที (ในวงดนตรี; แฮ็ค) : ttyconv
เป็นแฮ็คที่ฉันเขียนเมื่อหลายปีก่อน (เริ่มแรกใน C ต่อมาใหม่ใน Python) ซึ่งใช้libiconv
ในการแปลงขั้ว I / O มันจะสร้าง pseudoterminal ใหม่และ (a) แปลงอักขระที่คุณพิมพ์จากการเข้ารหัสในเครื่องของคุณเป็นการเข้ารหัสจากระยะไกลและ (b) แปลงรหัสอักขระที่คุณได้รับจากการเข้ารหัสระยะไกลเป็นการเข้ารหัสท้องถิ่นของคุณ ฉันใช้มันเพื่อพูดคุยกับเซิร์ฟเวอร์ที่ใช้การเข้ารหัสที่ไม่ได้รับการสนับสนุนจากเทอร์มินัล Linux มาตรฐาน โปรดทราบว่าการเข้ารหัสระยะไกลทั้งหมดที่ฉันทดสอบด้วยเป็นการเข้ารหัสไบต์เดียวดังนั้นฉันจึงไม่สามารถรับประกันได้ว่า Shift JIS จะทำงานได้ ฉันมักจะไม่พบการโทรเพื่อใช้งานในปัจจุบันด้วยระบบส่วนใหญ่เปลี่ยนเป็น Unicode
นี่คือวิธีที่คุณจะใช้:
$ ttyconv -rsjis -- tail -f x
ข้อเสียttyconv
คือฉันเขียนมันไม่มีใครใช้มัน แต่ฉันก็อาจเต็มไปด้วยข้อบกพร่อง ฉันเก่งเรื่องนี้ ข้อดีคือมันใช้libiconv
ดังนั้นหากการเข้ารหัสของคุณผิดปกติมันเป็นทางออกที่ดีที่สุดของคุณ เมื่อนับครั้งล่าสุดttyconv --list
รองรับการเข้ารหัส 100 รายการ