我在许多系统上下文中看到不可打印的字符,例如手册页和日志。它们显示为突出显示的问号。例如,在一个手册页中,我有以下值:
E2 9F A8 ...email address... E2 9F A9
和作者姓名
F r C3 A9 d C3 A9 r i c k
其中数字是十六进制值。我无法在 unicode 中找到这些值,所以我不确定它们是什么。当我将它们视为转义序列时,我得到以下结果:
M-b M-^ M-^_ M-( ... email address ... M-b M-^_ M-)
如何正确翻译输出?请注意,我的区域设置设置为:
LANG=en_US.UTF-8
$TERM 是“linux”,我在机器本身上使用虚拟控制台。
答案1
基本上,虽然您的评论者没有明确说明,但您的手册页正在使用 UTF-8 字符进行格式化。根据不同的情况,这可能会被修复
假设您希望在手册页中使用美式英语,
LC_CTYPE=C 人无论你想查什么
应该压制这种行为。根据您的简历判断,您可能会喜欢这个选项。如果未设置 LC_CTYPE,则可以指定 LC_ALL 而不是 LC_CTYPE。与所有环境变量一样,您可以在 shell 中设置它并使其对所有命令生效。
另一个可以禁用此功能的语言环境选项是 en_US,如果您不需要美式英语,那么还有很多其他语言环境,其中许多语言环境都有 .UTF-8,并且如果没有它,可能不会执行 UTF-8。
- 如果您的控制台字体恰好有相关字符的 unicode 映射,您可能只需
-r
在手册页中键入,您的页器就会显示正确的字符。尽管如此,这种设置并非没有风险。它允许您正在查看的文档中的任何终端控制序列生效。在查看手册页时,您应该安全地执行此操作,但如果查看来自不可信来源的文件或查看其中包含随机数据的文件,则可能会锁定您的控制台或更糟的情况。 (有一些终端转义序列允许您显示到控制台的文件将字符放入键盘缓冲区中,让它们生效,就像您在读取键盘缓冲区后立即键入它们一样。我不知道是否Linux 虚拟控制台支持或不支持其中任何一个。)
我认为这是人们更注意到的事情,因为 Linux 发行版已经切换到默认打开而不是关闭 UTF-8。与此同时,Linux 控制台仍然只支持 512 个字符的字体,并且只有在禁用 16 种颜色中的一半的情况下才支持。在其他 Unicode 初期问题中,X window 字体仅支持 64k 字符,而 Unicode 的字符数量远多于 64k。