(lấy cái này với một nhúm muối) Theo tôi nhớ, vấn đề nằm ở cách libiconv
làm việc. Mã hóa nhiều byte cần một máy trạng thái để giải mã chúng và libiconv
thích nhận toàn bộ các ký tự, vì vậy bạn không thể chỉ cung cấp cho nó một nửa ký tự trong một lệnh gọi hàm và nửa còn lại trong lần gọi tiếp theo.
Tôi có thể nghĩ về hai giải pháp khác, một là một phương pháp ngoài băng tốt, hai là một hack trong băng tần.
Thay đổi mã hóa Trình mô phỏng đầu cuối (ngoài băng tần) : một là thay đổi mã hóa ký tự trong trình giả lập thiết bị đầu cuối của bạn, vì vậy mã hóa gốc của nó là Shift JIS. Tôi chỉ kiểm tra konsole
, và được hỗ trợ này. Từ menu, Xem → Mã hóa ký tự → Japenese → sjis. Sau đó, bạn có thể chỉ tail -f
tập tin và konsole
sẽ đảm nhiệm việc giải mã các ký tự đa nhân và kết hợp chúng với các glyphs phông chữ.
Mã hóa thiết bị đầu cuối chuyển đổi nhanh chóng (trong băng tần; tốt nhất) : lịch sự của Gilles, người đã nhắc nhở tôi luit
sau một thời gian rất dài. Sử dụng luit
, đáng lẽ phải đi kèm với bản phân phối XOrg của bạn (trên Debian, đó là gói x11-utils
). Sử dụng nó như thế này:
$ luit -encoding SJIS -- tail -f x
Điều này sẽ làm cho mã hóa đầu cuối SJIS đến / từ mã hóa đầu cuối của bạn và chạy tail -f x
. Nhược điểm của luit
nó là nó không hỗ trợ sự giàu có của các bảng mã được hỗ trợ bởi libiconv
. Ưu điểm là nó có sẵn ở hầu hết mọi nơi.
Mã hóa thiết bị đầu cuối mã hóa đang hoạt động (in-band; hack) : ttyconv
là một hack tôi đã viết cách đây nhiều năm (ban đầu là C, sau đó được làm lại bằng Python) sử dụng libiconv
để chuyển mã I / O của thiết bị đầu cuối. Nó sinh ra một giả mới và (a) chuyển mã các ký tự bạn nhập từ mã hóa cục bộ sang mã hóa từ xa và (b) chuyển mã các ký tự bạn nhận được từ mã hóa từ xa sang mã hóa cục bộ. Tôi đã sử dụng nó để nói chuyện với các máy chủ sử dụng mã hóa không được hỗ trợ bởi các thiết bị đầu cuối Linux tiêu chuẩn. Xin lưu ý rằng tất cả các mã hóa từ xa mà tôi đã kiểm tra nó là các mã hóa một byte, vì vậy tôi không thể đảm bảo nó sẽ hoạt động cho Shift JIS. Tôi thường không tìm thấy cuộc gọi để sử dụng nó trong những ngày này, với hầu hết các hệ thống chuyển sang Unicode.
Đây là cách bạn sẽ sử dụng nó:
$ ttyconv -rsjis -- tail -f x
Nhược điểm của ttyconv
tôi là tôi đã viết nó, không ai sử dụng nó ngoài tôi, nó có lẽ đầy lỗi. Tôi xuất sắc về điều này. Ưu điểm là nó sử dụng libiconv
, vì vậy nếu mã hóa của bạn không bình thường, đó là cách tốt nhất của bạn. Ở lần đếm cuối cùng, ttyconv --list
hỗ trợ 100 bảng mã.