Để thực hiện less
chạy mã hóa khác với thiết bị đầu cuối, hãy sử dụng luit (đi kèm với bộ tiện ích X11).
LANG=ru_RU.CP1251 luit less subs.srt
Nếu bạn muốn tự động phát hiện mã hóa, điều đó khó hơn, bởi vì một tệp văn bản không có dấu hiệu mã hóa. Phần mềm Enca cố gắng nhận dạng mã hóa của một tệp dựa trên ngôn ngữ của nó:
$ enca -L russian subs.srt
MS-Windows code page 1251
$ iconv -f "$(enca -iL russian subs.srt)" | less
Bạn có thể biến tổ hợp này thành một LESSOPEN
bộ lọc (xem Làm thế nào tôi có thể xem các tệp được nén bằng ít hơn mà không phải nhập zless? Ví dụ). Tuy nhiên, điều đó có thể không mang lại kết quả tốt cho văn bản không thực sự bằng tiếng Nga.
Nếu bạn chỉ sử dụng UTF-8 và CP1251, bạn có thể quay lại CP1251 khi một tệp không hợp lệ UTF-8 - có những lỗ hổng trong ứng dụng UTF-8 khiến cho hầu hết các tệp trong mã hóa 8 bit không hợp lệ UTF-8. Tập lệnh lọc bằng chứng khái niệm cho LESSOPEN
(có thể không hoạt động trên các hệ thống khác ngoài Linux, vì nó phụ thuộc vào head -c N
việc đọc chính xác N byte):
#!/bin/sh
head=$(head -c 1000)
if printf '%s\n' "$head" | grep -qav '^.*$'; then
{ printf '%s\n' "$head"; cat; } | iconv -f CP1251
else
{ printf '%s\n' "$head"; cat; }
fi