Jak naprawić PuTTY pokazujący zniekształcone znaki?


76

Łącząc się z komputera z systemem Windows 7 za pośrednictwem SSH do serwera Ubuntu za pomocą PuTTY , pojawia się kilka błędów ekranu:

wprowadź opis zdjęcia tutaj

To znaczy:

  • „Podwójne losowanie” wybór w Midnight Commander (MC).
  • Inne znaki, takie jak elementy linii, są rysowane jako niewłaściwe znaki (np. „” zamiast „|”).

Połączyłem się z tym samym serwerem Ubuntu z terminalem i SHH z systemu Mac OS X i nie powoduję zakłóceń na ekranie (tzn. Wszystko wygląda i działa poprawnie). Próbowałem już grać z ustawieniami czcionek w PuTTY, zmieniając go z Courier New na Consolas, ale bez powodzenia.

Moje pytanie brzmi zatem:

Jak skonfigurować PuTTY do poprawnego wyświetlania znaków specjalnych, a nie podwójnego rysowania / zastępowania linii ekranu?


1
Z SecureCRT: Wybierz Opcje -> Opcje sesji -> Terminal -> Wygląd -> Kodowanie znaków -> wybierz: UTF-8. Mam nadzieję, że pomogą innym takim jak ja!
Vunb

Odpowiedzi:


72

Prawie na pewno ustawiłeś niewłaściwy zestaw znaków w ustawieniach PuTTY .

Sprawdź zestaw znaków w systemie zdalnym, uruchamiając polecenie:

locale

Powinno to zwrócić coś takiego:

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=

Sprawdź więc ustawienia PuTTY w sekcji Tłumaczenie i upewnij się, że UTF-8ustawiłeś zestaw znaków.

Ponowna konfiguracja PuTTY

Konieczne może być również dostosowanie ustawienia rysowania linii, ale prawdopodobnie nie jest to prawdopodobne.


14
To nie jest wystarczające we wszystkich przypadkach. Powinieneś także wyeksportować następującą zmienną do swojego środowiska: NCURSES_NO_UTF8_ACS=1 [więcej informacji ]
Piotr Jurkiewicz,

2
w przypadku localezwrotów POSIXprawdopodobnie używasz usePAM w konfiguracji sshd
user2693017

4
Jeśli ustawienia regionalne zwracają coś podobnego POSIX, wydaj update-locale LANG=en_US.utf8polecenie w wierszu polecenia - patrz thomas-krenn.com/de/wiki/Locales_unter_Ubuntu_konfigurieren
koppor

@ michael-hampton, mój system jest skonfigurowany do używania en_US.UTF-8. Widzę, że różne miejsca mówią różne rzeczy o lokalizacji. Niektóre miejsca wspominają, że powinienem używać en_US, podczas gdy inne miejsca wspominają, że powinienem używać de_DE. Wiedziałem, że widziałem, zanim grep i inne podstawowe narzędzia używają ustawień regionalnych do ustawienia zestawu znaków. Jakie są implikacje zmiany tego?
alpha_989

@koppor, wspomniałeś o zmianie ustawień regionalnych na en_US, a Michael wspomniał o zmianie ustawień regionalnych na de_DE. Który jest prawidłowy?
alpha_989,

34

Miałem problem z aptitudeprogramem Debiana, mimo że miałem UTF-8 jako zestaw moich znaków. Dla mnie zadziałało ustawienie „Połączenie> Dane>” Ciąg terminala ”na„ kit ”zamiast„ xterm ”- najwyraźniej Putty ignoruje sekwencję znaków, aby przejść do trybu rysowania: http: //www.chiark.greenend .org.uk / ~ sgtatham / putty / wishlist / utf8-plus-vt100.html

wprowadź opis zdjęcia tutaj


2
Doskonały. Łatwe i działa. (Przynajmniej działa na Debianie / Ubuntu.)
Nate

1
Działa to dobrze (na PuTTY), ale wprowadza kolejny (mniejszy) problem: zmiana tytułu okna zdalnie sterowanego nie działa.
ADTC

Doskonały. Rozwiązano problem z ncmpc na Ubuntu Artful.
weberjn


8

Dwa podstawowe czynniki to Window / Translation UTF-8 w putty i ustawienia regionalne w Linuksie, zgodnie z instrukcją tutaj i wieloma innymi miejscami.

Ponadto w putty może pomóc ustawić ciąg typu Connection / Data / Terminal na putty i / lub w Linuksie na export NCURSES_NO_UTF8_ACS=1. Te dwa są również wymienione wiele miejsc.

Ale: nadal możesz otrzymywać bloki dla niektórych znaków, ponieważ domyślne czcionki, takie jak Courier i Lucida Console, nie mają wszystkich znaków Unicode. Pobierz i zainstaluj http://dejavu-fonts.org/wiki/Download i ustaw kit, aby go używał.

Ta ostatnia sztuczka była mi niezbędna, aby uzyskać noping(zalecane!) Wyświetlanie wszystkich znaków graficznych.


2
export NCURSES_NO_UTF8_ACS=1działało najlepiej dla mnie. Muszę tylko pamiętać o włączeniu tej -Eopcji sudopodczas uruchamiania, iftopaby zachować to ustawienie środowiska. sudo -E iftop
HeatfanJohn

5

W moim przypadku (Ubuntu 14.04) problem został spowodowany brakiem

UsePAM yes    

wpis w / etc / ssh / sshd_config jako /etc/pam.d/sshd pam konfiguracja jest domyślnie odpowiedzialna za ładowanie / etc / default / locale do środowiska użytkownika.


Naprawiłem to dla mnie.
Martin

5

Dla wszystkich biednych starych facetów z VMS, którzy tu kończą:

PuTTY → Okno → Tłumaczenie → Zdalny zestaw znaków → DEC-MCS

pracował dla mnie.


4

Szukałem wielu rozwiązań w tym zakresie, używając komputera Docker (zarówno na poziomie lokalnym, jak i na komputerach skonfigurowanych przez administratora systemu). W moim Kit wszystko było w porządku (miałem UTF-8), korzystałem z innego klienta SSH i miałem dokładnie ten sam problem.

Bieganie:

mc -ac

rozwiązałem problem (ale nie do końca) i szukałem kompletnego rozwiązania.

Po przeczytaniu wielu sugestii w końcu znalazłem tę, która rozwiązała mój problem.

W terminalu po uruchomieniu:

locale

sprawdź ustawienia regionalne, które ustawiłeś. Miałem domyślnie Custawienia regionalne.

Aby zweryfikować wszystkie zainstalowane ustawienia regionalne, uruchom locale -a

Mam na przykład:

C
C.UTF-8
POSIX

domyślnie.

Rozwiązaniem jest eksportowanie LANGzmiennych o C.UTF-8takich ustawieniach regionalnych, jak:

export LANG="C.UTF-8"

Możesz oczywiście dodać go, .bashrcaby automatycznie ustawiał się w swoim profilu.


Jakie są skutki uboczne zmiany zmiennej LANG? Jeśli miałeś już C.UTF-8 jako LANG, po co eksportować go ponownie?
alpha_989

2

Kolejny powód w jakiś sposób związany z pam, który może wpływać na hosty z uwierzytelnianiem powerbroker / pbis / podobnie.

grep /etc/pam.d dla wystąpienia „lsass”:

grep -r lsass /etc/pam.d

jeśli zobaczysz w danych wyjściowych coś takiego:

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

to prawdopodobnie jest to podstawowa przyczyna problemu. Szybka poprawka polega na zamianie „wystarczającej” na „opcjonalną” obok modułu pam_lsass, aby wyglądało to tak:

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

/etc/pam.d/common-session (lub inny plik z podobnym wpisem - może być ich kilka) jest prawdopodobnie dołączony przez /etc/pam.d/sshd przed załadowaniem pam_env, więc jeśli przetwarzanie modułów pam zostanie zakończone zanim dojdzie do pam_env, / etc / default / locale nie jest ładowany do środowiska użytkownika i masz zniekształcone znaki.


2

Po 15 latach znów się zirytowałem i ponownie zacząłem szukać w Google, znalazłem to, wybrałem

zmień ustawienia → okno → tłumaczenie → zdalny zestaw znaków → „użyj kodowania czcionek”

i to naprawiło.


2

Musiałem ustawić na stronie OknoTłumaczenie zestaw znaków na:

ISO-8859-1: 1998 (Latin-1, Europa Zachodnia)

Wtedy, i tylko wtedy, znaki kreskowania pojawiły się poprawnie.


1

Uruchamianie mc w ten sposób (ustaw locale na en) działa dla mnie:

$ LC_ALL=en mc

1

działało dla mnie „Połączenie, dane, ciąg terminala = ansi” plus „Okno, tłumaczenie, zdalny zestaw znaków = Użyj kodowania czcionek”, a następnie set TERM=ansipo stronie Uniksa.

PS. Pamiętaj, aby wyłączyć inteligentne cytaty, jeśli jesteś zmuszony używać MS-Word.


1
Powinieneś także wspomnieć, że nie łączysz się z nowoczesnym systemem LInux, ale starszym systemem innym niż Linux.
Michael Hampton

1

Mój problem polegał na tym, że kit jest skonfigurowany jako UTF-8, ale zdalny system to ISO-8859-1

zachodnia Europa, więc zmieniłem to na kit i wszystko działało dobrze.

Zrzut ekranu Putty

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.