(bunu bir tutam tuzla alın) Hatırladığım kadarıyla, sorun libiconv
işte yatıyor . Çok baytlı kodlamalar, kodları çözmek için bir durum makinesine ihtiyaç duyar ve libiconv
tüm karakterleri almayı tercih eder, bu nedenle bir işlev çağrısında yarım karakter, diğerinde ise diğer yarıyı veremezsiniz.
Bir başka iki çözüm düşünebilirim, biri iyi bir bant dışı yöntem, diğeri bant içi bir kesmek.
Terminal Emulator kodlamasını değiştirme (bant dışı) : biri terminal öykünücünüzdeki karakter kodlamasını değiştirmek, böylece yerel kodlaması Shift JIS'dir. Sadece kontrol ettim konsole
ve bunu destekliyor. Menüden Görünüm → Karakter kodlama → Japonca → sjis. Daha sonra sadece tail -f
dosyayı oluşturabilir ve konsole
çok baytlı karakterlerin kodunu çözüp font glifleriyle eşleştirebilirsiniz.
Anında kod kodlama terminali (bant içi; en iyi) : luit
çok uzun bir süre sonra bana hatırlatan Gilles'in izniyle . luit
XOrg dağıtımınızla birlikte gelmesi gereken kullanımı (Debian'da, paketidir x11-utils
). Şöyle kullanın:
$ luit -encoding SJIS -- tail -f x
Bu, SJIS terminal kodunu terminal kodlamanıza / kodlamanız yapar ve çalışır tail -f x
. Bunun dezavantajı, luit
desteklediği kodlama zenginliğini desteklememesidir libiconv
. Ters tarafı hemen hemen her yerde kullanılabilir.
Transcode terminal kodlama anında (bant içi; hack) : ttyconv
yıllar önce yazdığım bir hack'tir (başlangıçta C, daha sonra Python'da redone) libiconv
terminal G / Ç'yi kodlamak için kullanılır . Yeni bir sözde örnek oluşturur ve (a) yerel kodlamanızdan yazdığınız karakterleri uzaktan kodlamaya kodlar ve (b) uzak kodlamadan aldığınız karakterleri yerel kodlamanıza kodlar. Standart Linux terminalleri tarafından desteklenmeyen kodlamaları kullanan sunucularla konuşmak için kullandım. Test ettiğim tüm uzak kodlamaların tek baytlı kodlamalar olduğunu lütfen unutmayın, bu yüzden Shift JIS için çalışacağını garanti edemem. Çoğu sistem Unicode'a geçerek, bugünlerde kullanmak için çağrı bulamıyorum.
Bunu nasıl kullanacağınız:
$ ttyconv -rsjis -- tail -f x
Olumsuz tarafı ttyconv
yazdım, kimse kullanmıyor ama ben, muhtemelen hatalarla dolu. Ben bu konuda mükemmelim. Tersi, kullanmasıdır libiconv
, bu nedenle kodlamanız olağandışıysa, en iyi bahistir. Son olarak, ttyconv --list
100 kodlamayı destekler.