Как исправить 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(рекомендовал!) Показывал все графические символы.

GauteLund
источник
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 в среду пользователя.

fakej Gazeta.pl
источник
Это исправило это для меня.
Мартин
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 не загружается в пользовательской среде, и у вас искаженные символы.

fakej Gazeta.pl
источник
2

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

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

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

Ясон
источник
2

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

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

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

zootal
источник
1

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

$ LC_ALL=en mc
marioosh
источник
1

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

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

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

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

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

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

velteyn
источник