(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.