Console
如何在 UTF-8 控制台中查看 cp1251 文本文件?
嘗試1:
$ less subs.srt "subs.srt" may be a binary file. See it anyway? <C8><F2><E0><EB><FC><FF><ED> ...
嘗試2:
$ LANG=ru_RU.CP1251 less subs.srt ����� �����, ��� ������. ��� ������� �������������! ...
解決方法:
$ iconv -f cp1251 < subs.srt | less
怎麼做才方便?
要以
less
與終端不同的編碼執行,請使用luit(隨 X11 實用程序套件提供)。LANG=ru_RU.CP1251 luit less subs.srt
如果您想自動檢測編碼,那就更棘手了,因為文本文件沒有任何編碼指示。Enca軟體嘗試根據文件的語言辨識文件的編碼:
$ enca -L russian subs.srt MS-Windows code page 1251 $ iconv -f "$(enca -iL russian subs.srt)" | less
您可以將此組合設置為
LESSOPEN
過濾器(例如,請參閱如何在不輸入 zless的情況下查看 gzip 壓縮文件?)。但是,對於實際上不是俄語的文本,這可能不會產生好的結果。如果您只使用 UTF-8 和 CP1251,當文件不是有效的 UTF-8時,您可以回退到 CP1251 — UTF-8 中存在“漏洞”,導致大多數 8 位編碼的文件無效UTF-8。概念驗證過濾器腳本
LESSOPEN
(可能不適用於 Linux 以外的系統,因為它依賴於head -c N
準確讀取 N 個字節):#!/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