24

I'm setting up the CPAN module for perl on CentOs 5, and one of the questions is 'Does your terminal support UTF-8?' (paraphrased). How do I find out?

Whatsit
  • 465
  • 2
  • 5
  • 9

7 Answers7

26

Type this in your terminal:

echo -e '\xe2\x82\xac' 

If your terminal supports UTF-8 it will output the euro sign:

user9474
  • 2,368
  • 2
  • 24
  • 26
17

Really, the surefire way to test is to download a text file and cat it in the terminal and see if everything looks ok.

or, if you can, recompile the terminal enabling the unicode option (assuming it has one).

what does $TERM and $LANG look like?

user1686
  • 8,717
  • 25
  • 38
theman_on_osx
  • 327
  • 3
  • 8
  • $TERM is "xterm" $LANG is "en_US.UTF-8" (aha!) The text file displays nicely in terminal, but curiously, not in Firefox. – Whatsit May 28 '09 at 16:16
  • yea, i actually encountered the same thing :-/ ... when i tried therek's suggestion, i got the question mark – theman_on_osx May 28 '09 at 17:02
  • $LANG just tells you what your system will use when writing to stdout/stderr. It doesn't say anything about the capabilities of the terminal. However, if everything your system prints of weird characters looks ok, then your terminal probably supports UTF-8. – Epcylon May 28 '09 at 17:58
  • 3
    This can even be automated, by displaying some text and checking its width (by reading the cursor position before and after). I posted a [proof of concept](http://unix.stackexchange.com/questions/10698/timing-out-in-a-shell-script) a propos something else. – Gilles 'SO- stop being evil' Apr 02 '13 at 18:17
  • @Gilles, your answer is brilliantly simple. Love it! –  Jan 23 '18 at 19:50
5

The lamest way: run following and check the output. It will be a capital O with circumflex if the terminal displays UTF-8.

perl -le 'print "\x{c3}\x{94}"'
therek
  • 682
  • 5
  • 6
  • I'm pretty sure my terminal supports UTF-8 now (passed the test suggested by theman_on_osx) but this just outputs a blank line. What's going on? – Whatsit May 28 '09 at 16:19
  • Maybe the font you're using in your terminal app does not support UTF-8 characters. – therek May 28 '09 at 18:13
  • 4
    I know this is extremely late but the UTF-8 Out flag makes that work better `perl -CO -le 'print "\x{d4}"'` – Ashley Feb 08 '11 at 21:49
  • 3
    Or without the -CO option, give Perl the correct UTF-8 bytes : $ perl -le 'print "\x{c3}\x{94}"' Ô – Tim Dec 31 '12 at 20:49
2

The most sure fire way is to use the ‘locale’ command. It will print out all the various and sundry variables that dictate what character set to use. For instance, this is my output on RHEL5.3, set to only use UTF-8 by default.

LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=
Scott Pack
  • 14,717
  • 10
  • 51
  • 83
  • 1
    This doesn't test the terminal, only the locale setting (which in practice isn't always set by the terminal emulator, may not reflect the current state of the terminal, or may have been overridden by some user configuration). – Gilles 'SO- stop being evil' Apr 02 '13 at 18:12
1

You may just use the following command:

locale charmap
ss32
  • 27
  • 1
1
curl http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt

or

wget -O - http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt

This obviously requires wget or curl.

Janus Troelsen
  • 1,014
  • 1
  • 8
  • 18
0
UTF=$(echo -e "\u263A")
if [[ ! "$UTF" =~ "A" ]]  ; then
 echo -n "UNICODE here!"
fi