I personaggi stranieri non verranno visualizzati in SSH


17

Sto riscontrando alcuni problemi con l'utilizzo sshe un server remoto (a cui non ho accesso come amministratore) - In particolare, ci sono un paio di cartelle con testo coreano e cirillico.

Quando visualizzo il contenuto della cartella principale con ls, i caratteri vengono salvati come "?". Forse è degno di nota il fatto che i personaggi coreani sembrano sfuggire molto di più rispetto al numero di personaggi che dovrebbero esserci.

So che il programma terminale che sto usando può visualizzare i caratteri, poiché l'utilizzo sftpli visualizza perfettamente. Il problema si verifica in tutti i terminali che ho provato.

Riepilogo delle macchine

Macchina locale:

  • Linux 2.6.32-5-686, i686
  • Debian GNU / Linux 6.0.2 (compressione)
  • Avere accesso come amministratore

Server remoto:

  • Linux 2.6.32-bpo.5-amd64, x86_64
  • Debian GNU / Linux 5.0.8 (lenny)
  • Non ho accesso come amministratore, né fisico

Probabilmente ho perso qualche altra statistica vitale o un po 'di informazioni, nel qual caso mi scuso. Sono abbastanza nuovo per tutto il lato non informatico dell'informatica, quindi a malapena so cosa sto facendo qui.


2
pubblica l'output dei comandi localee locale -a, sia localmente che da remoto, per favore
enzotib,

Grazie @enzotib - Il tuo commento mi ha portato all'idea che i locali offerti potrebbero non essere gli stessi a livello locale e remoto.
ChemicalRascal,

Risposte:


20

Le informazioni sulla tua locale non sono impostate correttamente sul computer server. In particolare, la LC_CTYPEvariabile, che indica la codifica dei caratteri sul terminale, non è impostata correttamente (o, sospetto, per niente).

Nel tuo terminale locale, corri localeper vedere le tue impostazioni locali. Probabilmente vedrai (tra le altre linee) qualcosa di simile LC_CTYPE=en_US.UTF-8; ciò che conta qui è la .UTF-8parte, che indica la codifica UTF-8 . Questa è la codifica di fatto standard per il testo multilingue nel mondo unix (e oltre).

È necessario passare queste informazioni al server. Il modo migliore, se funziona, è inviare informazioni sulla locale tramite la connessione ssh. Per questo, aggiungi le seguenti righe alla fine di ~/.ssh/config:

Host *
SendEnv LC_* LANG

Ciò richiede che AcceptEnvsia presente una direttiva adatta nella configurazione del server ( /etc/ssh/sshd_config) (è di default su Debian).

Se ciò non funziona e accedi sempre al server da un terminale UTF-8, aggiungi la linea export LC_CTYPE=en_US.UTF-8al tuo ~/.bashrcsul server ( ~/.zshrco qualunque file usi la tua shell). Il nome della locale (ad es. en_US.UTF-8) Deve essere uno di quelli offerti da locale -ae deve avere .UTF-8( .utf8o qualche variazione banale).


1
Ah! Quello sarebbe il problema: io "uso" en_AU.utf8 localmente, che sembrava essere già inoltrato al server (o, almeno, gli localeoutput corrispondevano). Tuttavia, da locale -aremoto ha dato solo en_GB.utf8 e en_US.utf8. Grazie!
ChemicalRascal,

1
Per ottenere la codifica della locale corrente, puoi anche usare:locale charmap

La mia /etc/ssh/ssh_configrichiesta di invio LANG( SendEnv LANG LC_*)
Shammel Lee,

E ho dovuto aggiungere export LC_CTYPE=en_US.UTF-8al mio ~/.profilesul lato server. L'aggiunta a ~/.bashrcsembrava non avere alcun effetto.
datka
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.