Как исправить PuTTY, показывающий искаженные символы?


77

При подключении с ПК с Windows 7 через SSH к серверу Ubuntu с помощью PuTTY я получаю некоторые ошибки на экране:

введите описание изображения здесь

Т.е. это:

  • «Двойное рисование» выделения внутри Midnight Commander (MC).
  • Другие символы, такие как линейные элементы, отображаются как неправильные символы (например, «â» вместо «|»).

Я подключился к тому же серверу Ubuntu с терминалом и SHH от Mac OS X и не получаю эти искажения экрана (т.е. все выглядит и работает правильно). Я уже пытался поиграть с настройками шрифта в PuTTY, изменив его с Courier New на Consolas, но без удачи.

Поэтому мой вопрос:

Как настроить PuTTY для правильного отображения специальных символов, а не для двойного рисования / перезаписи линий экрана?


1
С SecureCRT: выберите Параметры -> Параметры сеанса -> Терминал -> Внешний вид -> Кодировка символов -> выберите: UTF-8. Надеюсь помочь другим, как я!
Vunb

Ответы:


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установили их в качестве набора символов.

PuTTY Реконфигурация

Вам также может понадобиться настроить параметры рисования линий, но это, вероятно, маловероятно.


14
Этого недостаточно во всех случаях. Вам также следует экспортировать следующую переменную в вашу среду: NCURSES_NO_UTF8_ACS=1 [подробнее ]
Петр Юркевич,

2
в случае localeвозвратов у POSIXвас, вероятно, отключен usePAM в конфигурации sshd
user2693017

4
Если языковой стандарт возвращает что-то похожее POSIX, введитеupdate-locale LANG=en_US.utf8 в командной строке - thomas-krenn.com/de/wiki/Locales_unter_Ubuntu_konfigurieren
koppor

@ michael-hampton, моя система настроена на использование en_US.UTF-8. Я вижу, что разные места говорят разные вещи о локали. В некоторых местах упоминается, что я должен использовать en_US, в то время как в других местах упоминается, что я должен использовать de_DE. Я видел, как grep и другие основные утилиты использовали локаль для установки набора символов, я полагаю. Каковы последствия изменения этого?
alpha_989

@koppor, вы упомянули об изменении локали на en_US, а Майкл упомянул об изменении локали на de_DE. Какой из них правильный?
alpha_989

34

У меня была проблема с aptitudeпрограммой Debian, хотя у меня был набор символов UTF-8. Для меня работало то, что я установил 'Соединение> Данные>' Строка типа терминала 'в' putty 'вместо' xterm '- очевидно, Putty игнорирует последовательность символов для переключения в режим рисования: http: //www.chiark.greenend .org.uk / ~ sgtatham / шпатлевка / лист желаний / utf8-плюс-vt100.html

введите описание изображения здесь


2
Отлично. Легко и все работает. (По крайней мере, так оно и есть в Debian / Ubuntu.)
конец

1
Это хорошо работает (в PuTTY), но затем возникает другая (более незначительная) проблема: изменение заголовка окна с дистанционным управлением больше не работает.
ADTC

Отлично. Решил проблему для ncmpc на Ubuntu Artful.
Weberjn


8

Двумя основными факторами являются Window / Translation UTF-8 в настройках putty и locale в Linux, как указано здесь и во многих других местах.

Кроме того, это может помочь в putty для установки строки Connection / Data / Terminal-type в putty , и / или в Linux в export NCURSES_NO_UTF8_ACS=1. Эти два также упоминаются в нескольких местах.

Но: вы все равно можете получить блоки для определенных символов, потому что стандартные шрифты, такие как Courier и Lucida Console, не имеют всех символов Unicode. Загрузите и установите http://dejavu-fonts.org/wiki/Download и установите putty для его использования.

Этот последний трюк был необходим для того, чтобы я noping(рекомендовал!) Показывал все графические символы.


2
export NCURSES_NO_UTF8_ACS=1работал лучше всего для меня. Мне просто нужно помнить, чтобы использовать эту -Eопцию sudoпри запуске, iftopчтобы сохранить настройки среды. sudo -E iftop
HeatfanJohn

5

В моем случае (Ubuntu 14.04) проблема была вызвана отсутствием

UsePAM yes    

запись в / etc / ssh / sshd_config как /etc/pam.d/sshd Настройка pam по умолчанию отвечает за загрузку / etc / default / locale в среду пользователя.


Это исправило это для меня.
Мартин

5

Для всех вас, бедных старых парней VMS, которые заканчивают здесь:

PuTTY → Окно → Перевод → Удаленный набор символов → DEC-MCS

работал на меня.


4

Я искал много решений для этого при использовании компьютера с докером (и локали, и на компьютерах, настроенных системным администратором). В моей 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

2

Другая причина, как-то связанная с pam, может повлиять на хосты с аутентификацией powerbroker / pbis / likewise.

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

/etc/pam.d/common-session (или другой файл с похожей записью - их может быть немного), вероятно, включается в /etc/pam.d/sshd до загрузки pam_env, поэтому, если обработка модулей pam завершена прежде чем перейти к pam_env, / etc / default / locale не загружается в пользовательской среде, и у вас искаженные символы.


2

Спустя 15 лет я снова разозлился и снова погуглил, нашел это, выбрал

изменить настройки → окно → перевод → удаленный набор символов → «использовать кодировку шрифта»

и это исправило.


2

Мне пришлось установить на странице « ОкноПеревод» набор символов:

ISO-8859-1: 1998 (Latin-1, Западная Европа)

Тогда, и только тогда, символы линеек выглядели правильно.


1

Запуск mc таким образом (установите для локали en) работает для меня:

$ LC_ALL=en mc

1

то, что работало для меня, было "Соединение, Данные, Терминал-тип string = ansi" плюс "Окно, Перевод, Удаленный набор символов = Использовать кодировку шрифта" тогда set TERM=ansiна стороне Unix.

PS. Не забудьте отключить умные кавычки, если вы вынуждены использовать MS-Word.


1
Также следует отметить, что вы подключаетесь не к современной системе LInux, а к более старой системе, отличной от Linux.
Майкл Хэмптон

1

Моя проблема была в том, что замазка настроена как UTF-8, но удаленная система - ISO-8859-1

Западная Европа, поэтому я изменил это на шпатлевке, и все работало нормально.

Скриншот замазки

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.