找出 less 使用哪种编码方法来显示文本文件的内容?

找出 less 使用哪种编码方法来显示文本文件的内容?

有一个纯文本文件,Emacs 无法正确显示,但less可以。

我想知道是否less自动检测每个单独文本文件的编码方法,或者仅对所有文本文件使用单一默认编码方法?

如何找出less用于解码文本文件的编码方法?

答案1

可执行less文件本身不进行任何编码转换:它将可打印字符直接发送到终端。什么被视为可打印是由LESSCHARSET环境变量控制的(有关详细信息,请参阅手册页),但一般来说,您不想触及它。因此,基本上,编码是从区域设置获得的(除非有特定设置)。

LESSOPEN如果设置了环境变量,则可以过滤输入,特别是进行转换。相应的过滤器可以告诉你是否做了一些转换;lesspipe例如,沃尔夫冈·弗里贝尔就是这样做的。

您可以使用该file实用程序来获取编码。例如:

$ file my_file.txt
my_file.txt: UTF-8 Unicode text

这可能比依赖更好less

答案2

less在当今的大多数系统上将使用 UTF-8。从man less

If neither LESSCHARSET nor LESSCHARDEF is set, but any of the strings
"UTF-8", "UTF8", "utf-8" or "utf8" is found in the LC_ALL, LC_CTYPE or
LANG environment variables, then the default character set is utf-8.

If that string is not found, but your system supports the setlocale
interface, less will use setlocale to determine the character set.
setlocale is controlled by setting the LANG or LC_CTYPE environment
variables.

Finally, if the setlocale interface is also not available, the default
character set is latin1.

为了确保less这种方式有效,创建一个包含以下内容的文件:

阿什查

用 打印它less。如果所有字符都正确显示,则说明您LANG包含 UTF-8。使用locale命令或打印变量查看它$LANG。现在将您的区域设置更改为名称中不带 UTF-8 的区域设置,例如:

$ export LANG=en_US

再次打印该文件。 Unicode 字符不应正确打印。

我也使用 Emacs,我记得在某些情况下它无法正确显示文件,但less可以。

相关内容