Skip to main content

GNU/screen & UTF-8

In a GNU/screen session on this box, this happens sometimes:

$ rm foo
rm: remove regular empty file ?foo??
Why does it show a question mark instead of an apostrophe?

Running the same command with a different or no LANG setting seems to help:
$ LANG=C rm foo
rm: remove regular empty file 'foo'?

$ LANG="" rm foo
rm: remove regular empty file 'foo'?

$ echo $LANG
en_US.UTF-8
I usually start my screen sessions with -U:
  > Run screen in UTF-8 mode. This option tells screen that your terminal sends and 
  > understands UTF-8 encoded characters. It also sets the default encoding for new
  > windows to ‘utf8’. 
So, we have LANG set to en_US.UTF-8 and screen(1) started in UTF-8 mode and still have character issues? Weird. But then I remembered: I use -U only when starting the screen session, not when resuming the session:
% screen -US MySession

$ echo $LANG; rm foo
en_US.UTF-8
rm: remove regular empty file 'foo'?
Upon resuming the session with "screen -dr" the question marks were back again. Resuming with -Udr fixes that.

A more simple test may be just to print some characters:
$ echo -e '\xe2\x82\xac' 
€

$ screen -S foo
# echo -e '\xe2\x82\xac' 
�
^ad

$ screen -Udr foo
# echo -e '\xe2\x82\xac' 
â¬
And conversely, this time we start our session in UTF-8 mode:
$ screen -US foo
# echo -e '\xe2\x82\xac' 
€
^ad

$ screen -dr foo
# echo -e '\xe2\x82\xac' 
?