(ambil ini dengan sejumput garam) Sejauh yang saya ingat, masalahnya terletak pada cara libiconv
kerjanya. Pengkodean multi-byte memerlukan mesin keadaan untuk mendekode mereka, dan libiconv
lebih suka menerima seluruh karakter, jadi Anda tidak bisa hanya memberikannya setengah karakter dalam satu panggilan fungsi dan setengah lainnya di berikutnya.
Saya bisa memikirkan dua solusi lain, satu adalah metode out-of-band yang bagus, yang lain adalah hack in-band.
Ubah pengkodean Terminal Emulator (out-of-band) : satu adalah untuk mengubah pengkodean karakter di terminal emulator Anda, sehingga pengkodean aslinya adalah Shift JIS. Saya baru saja memeriksa konsole
, dan mendukung ini. Dari menu, Lihat → Pengkodean karakter → Japenese → sjis. Anda kemudian dapat hanya tail -f
file, dan konsole
akan mengurus decoding karakter multibyte dan mencocokkannya dengan font mesin terbang.
Pengkodean terminal transcode dengan cepat (in-band; terbaik) : milik Gilles, yang mengingatkan saya luit
setelah waktu yang sangat lama. Gunakan luit
, yang seharusnya datang dengan distribusi XOrg Anda (pada Debian, paket itu x11-utils
). Gunakan seperti ini:
$ luit -encoding SJIS -- tail -f x
Ini akan membuat terminal transcode SJIS ke / dari pengkodean terminal Anda, dan dijalankan tail -f x
. Kelemahannya luit
adalah tidak mendukung kekayaan pengkodean yang didukung oleh libiconv
. Sisi baiknya adalah ini tersedia hampir di mana-mana.
Pengkodean terminal transcode saat itu juga (in-band; hack) : ttyconv
adalah hack yang saya tulis bertahun-tahun yang lalu (awalnya dalam C, kemudian diulang dengan Python) yang digunakan libiconv
untuk transcode terminal I / O. Ini memunculkan pseudoterminal baru dan (a) mentranskode karakter yang Anda ketik dari pengkodean lokal ke dalam pengkodean jarak jauh, dan (b) mentranskode karakter yang Anda terima dari pengodean jauh ke pengodean lokal Anda. Saya menggunakannya untuk berbicara dengan server yang menggunakan penyandian yang tidak didukung oleh terminal Linux standar. Harap dicatat bahwa semua pengkodean jarak jauh yang saya uji dengan pengodean byte tunggal, jadi saya tidak dapat menjamin itu akan bekerja untuk Shift JIS. Saya tidak sering menemukan panggilan untuk menggunakannya hari ini, dengan sebagian besar sistem beralih ke Unicode.
Ini adalah bagaimana Anda akan menggunakannya:
$ ttyconv -rsjis -- tail -f x
Kelemahannya ttyconv
adalah bahwa saya menulisnya, tidak ada yang menggunakannya kecuali saya, mungkin penuh dengan bug. Saya unggul dalam hal ini. Sisi positifnya adalah yang digunakannya libiconv
, jadi jika pengkodean Anda tidak biasa, itu taruhan terbaik Anda. Pada hitungan terakhir, ttyconv --list
mendukung 100 penyandian.
luit
, bagian dari paket utilitas X11 standar, yang mirip dengan Andattyconv
.luit
mirip, kecuali bahwa itu bekerja jauh lebih baik daripada milikku. ;) Terima kasih! Inilah sebabnya saya berhenti menggunakan sejak awal. Dalam 12 tahun sejak saya berhasil melupakan bahkan nama perintah dan saya sudah mencarinya sejak itu.luit
bekerja untukku juga. Mengapa Anda tidak menjadikannya jawaban 'resmi'? Itu adalah bagian dari instalasi saya (debian), dan dengan demikian adalah yang paling mudah digunakan untuk saya.luit
sebagai pilihan terbaik untuk SJIS. Sayangnya, sepertinya tidak mendukung setiap encodinglibiconv
. Sepertinya saya masih harus menggunakan solusi saya sendiri untuk tujuan surealis saya sendiri. :)Mirip dengan
ttyconv
ada jugatconv
, ditulis dalam C oleh Rich Felker.Lihat: Re: Panggilan untuk memperbaiki aterm / rxvt / dll ...
sumber