Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm having some problems with using ssh and a remote server (which I do not have admin access to) - Specifically, there are a couple of folders on there with Korean and Cyrillic text.

When I display the parent folder contents with ls, the characters are escaped as "?". Perhaps of note is that the Korean characters seem to escape far more ?s than the number of characters that should be there.

I know that the terminal program I'm using can display the characters, as using sftp displays them perfectly. The problem occurs across all terminals I've tried.

Summary of machines

Local machine:

  • Linux 2.6.32-5-686, i686
  • Debian GNU/Linux 6.0.2 (squeeze)
  • Have admin access

Remote server:

  • Linux 2.6.32-bpo.5-amd64, x86_64
  • Debian GNU/Linux 5.0.8 (lenny)
  • Don't have admin access, nor physical

I've probably missed some other vital statistic or bit of information, in which case I apologize. I'm fairly new to the whole non-Windows side of computing, so I barely know what I'm doing here.

share|improve this question
post the output from the locale and locale -a commands, both locally and remotely, please – enzotib Jul 16 '11 at 11:19
Thanks @enzotib - Your comment twigged me onto the idea that the offered locales might not be the same locally and remotely. – ChemicalRascal Jul 19 '11 at 7:39
up vote 11 down vote accepted

Your locale information isn't set up correctly on the server machine. Specifically, the LC_CTYPE variable, which indicates the encoding of characters on the terminal, isn't set correctly (or, I suspect, at all).

In your local terminal, run locale to see your locale settings. You'll probably see (amongst other lines) something like LC_CTYPE=en_US.UTF-8; what matters here is the .UTF-8 part, indicating the UTF-8 encoding. This is the de facto standard encoding for multilingual text in the unix world (and beyond).

You need to pass this information to the server. The best way, if it works, is to send locale information through the ssh connection. For this, add the following lines at the end of ~/.ssh/config:

Host *
SendEnv LC_*

This requires that a suitable AcceptEnv directive be present in the server configuration (/etc/ssh/sshd_config) (it is by default on Debian).

If that doesn't work, and you always log in to the server from a UTF-8 terminal, add the line export LC_CTYPE=en_US.UTF-8 to your ~/.bashrc on the server (or ~/.zshrc or whatever file your shell uses). The locale name (e.g. en_US.UTF-8) must be one of those offered by locale -a, and must have .UTF-8 (or .utf8 or some trivial variation).

share|improve this answer
Ah! That'd be the problem: I "use" en_AU.utf8 locally, which seemed to be already forwarded to the server (or, at least, the locale outputs matched). However, locale -a remotely gave only en_GB.utf8 and en_US.utf8. Thanks! – ChemicalRascal Jul 19 '11 at 7:39
To get the encoding of the current locale, you may also use: locale charmap – user9171 Jul 19 '11 at 12:09

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.