如何在 UTF-8 控制台中查看 cp1251 文本文件?

如何在 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

我怎样做才方便呢?

答案1

要以less与终端不同的编码运行,请使用卢伊特(随 X11 实用程序套件一起提供)。

LANG=ru_RU.CP1251 luit less subs.srt

如果您想自动检测编码,那就更棘手了,因为文本文件不包含其编码的指示。软件恩卡尝试根据文件的语言识别文件的编码:

$ enca -L russian subs.srt
MS-Windows code page 1251
$ iconv -f "$(enca -iL russian subs.srt)" | less

您可以将此组合作为LESSOPEN过滤器(请参阅如何在 less 中查看 gzip 压缩文件而无需输入 zless?举个例子)。然而,对于实际上不是俄语的文本,这可能不会给出好的结果。

如果您仅使用 UTF-8 和 CP1251,则在文件传输时可以回退到 CP1251不是有效的 UTF-8— 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

相关内容