如何修复显示乱码的PuTTY?


76

使用PuTTY从Windows 7 PC通过SSH连接到Ubuntu服务器,出现一些屏幕错误:

在此处输入图片说明

即:

  • 午夜指挥官(MC)内的选择“双画” 。
  • 其他字符(如线元素)被绘制为错误的字符(例如,用“â”代替“ |”)。

我通过终端和Mac OS X的SHH连接到同一台Ubuntu服务器,但没有出现这些屏幕乱码(即,一切看起来和正常运行)。我已经尝试过在PuTTY中使用字体设置,将其从Courier New更改为Consolas,但是没有运气。

因此,我的问题是:

如何配置PuTTY以正确显示特殊字符而不是双画/覆盖屏幕行?


1
使用SecureCRT:选择选项->会话选项->终端->外观->字符编码->选择:UTF-8。希望能帮助像我这样的人!
Vunb

Answers:


72

您几乎可以肯定在PuTTY设置中设置了错误的字符集。

通过运行以下命令来验证远程系统上的字符集:

locale

这应该返回类似:

LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=

因此,请检查“ 翻译”下的PuTTY设置,并确保已将其UTF-8设置为字符集。

重新配置腻子

您可能还需要调整线条画设置,但这可能不太可能。


14
在所有情况下,这还不够。您还应该将以下变量导出到您的环境:NCURSES_NO_UTF8_ACS=1 [更多信息 ]
Piotr Jurkiewicz 2014年

2
万一locale返回,POSIX您可能已在sshd配置中禁用了
usePAM

4
如果语言环境返回POSIX,则update-locale LANG=en_US.utf8在命令行中发出-参见thomas-krenn.com/de/wiki/Locales_unter_Ubuntu_konfigurieren
koppor 2015年

@ michael-hampton,我的系统配置为使用en_US.UTF-8。我看到不同的地方对语言环境有不同的看法。有些地方提到我应该使用en_US,而其他地方提到我应该使用de_DE。我相信,我看到grep和其他核心实用程序使用语言环境设置字符集之前。改变这一点意味着什么?
alpha_989

@koppor,您提到将语言环境更改为en_US,而michael提到了将语言环境更改为de_DE。哪一个是正确的?
alpha_989

34

aptitude即使我使用UTF-8作为字符集,我也对Debian的程序有疑问。对我有用的是将“连接>数据>终端类型字符串”设置为“ putty”而不是“ xterm”-显然,Putty忽略了切换到绘图模式的字符序列:http://www.chiark.greenend .org.uk /〜sgtatham / putty / wishlist / utf8-plus-vt100.html

在此处输入图片说明


2
优秀的。简单而有效。(至少在Debian / Ubuntu上是这样)
Nate

1
这在PuTTY上运行良好,但随后引入了另一个(较小的问题)问题:更改远程控制的窗口标题不再起作用。
ADTC

优秀的。解决了Ubuntu Artful上ncmpc的问题。
weberjn


8

两个基本因素是在腻子中的Window / Translation UTF-8和在Linux中的语言环境设置,如此处和许多其他地方所述。

另外,将putty / Connection / Data / Terminal-type字符串设置为putty和/或在Linux 中将putty设置为putty可能会有所帮助export NCURSES_NO_UTF8_ACS=1。还提到了这两个地方。

但是:由于某些默认字体(例如Courier和Lucida Console)没有全部Unicode字符,因此您可能仍会为某些字符获得块。下载并安装http://dejavu-fonts.org/wiki/Download,并设置腻子以使用它。

这最后一个技巧对我来说noping(建议使用!)以显示所有图形字符是必需的。


2
export NCURSES_NO_UTF8_ACS=1最适合我 我只需要记住在运行时使用该-E选项以保持该环境设置。sudoiftopsudo -E iftop
HeatfanJohn

5

就我而言(Ubuntu 14.04),此问题是由于缺少

UsePAM yes    

默认情况下,/ etc / ssh / sshd_config中的/etc/pam.d/sshd pam配置条目负责将/ etc / default / locale加载到用户环境中。


这为我解决了。
马丁


4

在使用Docker机器时(包括语言环境和系统管理员设置的机器),我一直在寻找许多解决方案。在我的Putty中,一切都很好(我有UTF-8),我也在使用其他SSH客户端,并且有完全相同的问题。

运行:

mc -ac

正在解决问题(但不是完全解决),我正在寻找完整的解决方案。

阅读许多建议后,我终于找到了解决我问题的方法。

在终端中运行时:

locale

验证您设置的语言环境。默认情况下,我具有C区域设置。

验证所有安装的语言环境运行 locale -a

我有例如:

C
C.UTF-8
POSIX

默认。

解决方案是LANG使用以下C.UTF-8语言环境导出变量:

export LANG="C.UTF-8"

您显然可以将其添加到.bashrc配置文件中,以便自动进行配置。


更改LANG变量有哪些副作用?如果您已经将C.UTF-8用作LANG,为什么还要再次将其导出?
alpha_989 '17

2

某种程度上与pam相关的另一个原因可能会影响具有powerbroker / pbis / like身份验证的主机。

grep /etc/pam.d用于发生“ lsass”:

grep -r lsass /etc/pam.d

如果您在输出中看到类似以下内容:

/etc/pam.d/common-session:session       sufficient        pam_lsass.so

那么这可能是问题的根本原因。快速解决方案是将pam_lsass模块旁边的“足够”替换为“可选”,如下所示:

/etc/pam.d/common-session:session       optional        pam_lsass.so

在装入pam_env之前,/ etc / pam.d / sshd可能包含/etc/pam.d/common-session(或其他具有类似条目的文件-可能很少)。因此,如果完成了pam模块的处理在谈到pam_env之前,/ etc / default / locale没有加载到用户环境中,并且字符乱码。


2

15年后,我再次感到恼火并再次在Google周围搜索,找到了这个,然后选择了

更改设置→窗口→翻译→远程字符集→“使用字体编码”

并解决了它。


2

我必须在“ 窗口” →“ 翻译”页面上将字符集设置为:

ISO-8859-1:1998(Latin-1,西欧)

然后,直到那时,线条画字符才正确显示。


1

以这种方式运行mc(将语言环境设置为en)对我有效:

$ LC_ALL=en mc

1

set TERM=ansi在Unix上,对我有用的是“连接,数据,终端类型的字符串= ansi”加上“窗口,翻译,远程字符集=使用字体编码” 。

PS。如果您被迫使用MS-Word,请记住要关闭智能报价。


1
您还应该提到,您不是在连接到现代的LInux系统,而是在连接一个较旧的非Linux系统。
迈克尔·汉普顿

1

我的问题是将腻子配置为UTF-8,但远程系统是ISO-8859-1

西欧,所以我改变了腻子,一切正常。

油灰截图

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.