有人能告诉我“使用字体编码”到底是什么意思吗?我找不到任何关于它的文档。
((仅供参考
其实我的问题是:
终端:Putty // 远程字符集 // UTF-8
服务器:Debian // bash // LANG=es_ES.UTF-8
一切正常,甚至
vim file_with_accents
但
cat file_with_accents
显示乱码。
但是,如果我将 PuTTY 配置为将“远程字符集”中的“UTF-8”更改为“使用字体编码”,则 cat 可以正常工作,而 vim 则会错误地显示重音字符。
))
答案1
编码和字符集
我想您知道,在 Unicode 和 UTF8 普及之前,存在许多不同的编码,例如 CP850 和 CP437。例如,代码点 188 在 CP437 中为 ╝,但在 Unicode 中为 ¼。
油灰
如果您与发出 CP437 等字符的服务器应用程序通信,Putty 需要知道这一点,以便它可以执行正确的转换,转换为通用编码,并使用该编码从可用字体中选择合适的字形。必须将 PuTTY 配置为将 188 转换为 ╝ 而不是 ¼。通常我会通过将“远程字符集”明确设置为“CP437”来实现这一点。
每种字体都有隐式编码。我猜,通过选择“使用字体编码”而不是设置显式值,您是在告诉 Putty 使用字体中的固有映射来查找用于任何接收到的字节值的字形。
您可以稍微探索一下,将“远程字符集”设置为Use Font Encoding
。将“终端窗口中使用的字体”设置为,然后Lucida Console
在该对话框中将“脚本”从更改为,Western
并Greek
在应用设置后,注意对话框中的“示例”和 cat 输出中的效果。“脚本”的可用值取决于所选的字体。我个人会明确设置编码,但也许有些特殊用例需要使用由特殊字体确定的编码。
Vim
编辑器vim
可以检测文件中的某些编码,并将文件编码 ( ) 转换为由环境变量 (LOCALE、LANG 等) 设置的fenc
显示编码 ( )。在 vim 中,您可以使用和查看这些设置。enc
:set fenc
:set enc
猫
根据我的经验,cat
不会在文件编码和显示编码之间执行任何转换。
结果
这可能就是为什么使用 vim 和 cat 会得到不同结果的原因,vim 正在将文件的文本转换为与 PuTTY 期望的匹配的编码(明确匹配或与所选字体和脚本中隐含的编码匹配)。
答案2
当我将字符集设置为使用字体编码时,启动 nmon 时我得到的是字母字符而不是线条,但是当我使用带有 -p 的 pstree 命令时得到的是正常线条,而当我选择 UTF-8 时则相反。
我通过选择 UTF-8 作为远程字符集来解决了这个问题,然后在处理线条绘制字符下,选择在 ANSI 和 OEM 模式下使用字体,并选中即使在 UTF-8 模式下也启用 VT100 线条绘制旁边的框。
现在,每个命令、每个屏幕和每个文件都显示正确的字符和行。