Jak sprawdzić, czy terminal obsługuje UTF-8

21

Konfiguruję moduł CPAN dla perla na CentO 5, a jedno z pytań brzmi: „Czy twój terminal obsługuje UTF-8?” (parafrazowany). Jak się dowiedzieć?

Co to
źródło

Odpowiedzi:

15

Naprawdę niezawodnym sposobem na przetestowanie jest pobranie pliku tekstowego i umieszczenie go w terminalu i sprawdzenie, czy wszystko wygląda dobrze.

lub, jeśli możesz, ponownie skompiluj terminal, włączając opcję Unicode (zakładając, że ma taką opcję).

jak wyglądają $ TERM i $ LANG?

theman_on_osx
źródło
$ TERM to „xterm” $ LANG to „en_US.UTF-8” (aha!) Plik tekstowy ładnie wyświetla się w terminalu, ale co ciekawe, nie w Firefoksie.
Whatsit
tak, faktycznie spotkałem to samo: - / ... kiedy spróbowałem sugestii, dostałem znak zapytania
theman_on_osx
$ LANG mówi ci tylko, czego użyje twój system podczas pisania na stdout / stderr. Nie mówi nic o możliwościach terminalu. Jeśli jednak wszystko, co drukuje dziwne znaki w twoim systemie, wygląda na to, że twój terminal prawdopodobnie obsługuje UTF-8.
Epcylon
3
Można to nawet zautomatyzować, wyświetlając tekst i sprawdzając jego szerokość (czytając pozycję kursora przed i po). Zamieściłem dowód koncepcji propos coś innego.
Gilles „SO- przestań być zły”
@Gilles, twoja odpowiedź jest genialnie prosta. Kocham to!
20

Wpisz to w swoim terminalu:

echo -e '\xe2\x82\xac' 

Jeśli twój terminal obsługuje UTF-8, wyświetli znak euro:

użytkownik9474
źródło
Nie wszystkie czcionki mają znak euro, dlatego wskazany może być inny punkt kodu testowego.
Michael Hampton
5

Najgorszy sposób: uruchom następujące i sprawdź dane wyjściowe. Będzie to wielka litera O z daszkiem, jeśli terminal wyświetli UTF-8.

perl -le 'print "\x{c3}\x{94}"'
po prostu
źródło
Jestem prawie pewien, że mój terminal obsługuje teraz UTF-8 (zdał test sugerowany przez theman_on_osx), ale to po prostu wyświetla pusty wiersz. Co się dzieje?
Whatsit
Być może czcionka używana w aplikacji terminalowej nie obsługuje znaków UTF-8.
tam
4
Wiem, że jest bardzo późno, ale flaga Out UTF-8 sprawia, że ​​działa lepiejperl -CO -le 'print "\x{d4}"'
Ashley
3
Lub bez opcji -CO, podaj Perlowi poprawne bajty UTF-8: $ perl -le 'print "\ x {c3} \ x {94}"' Ô
Tim
2

Najpewniejszym sposobem na ogień jest użycie polecenia „locale”. Wydrukuje wszystkie różne i różne zmienne, które określają, jakiego zestawu znaków użyć. Na przykład, to jest moje wyjście na RHEL5.3, ustawione tak, aby domyślnie używało tylko UTF-8.

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
źródło
1
Nie testuje to terminala, a jedynie ustawienia regionalne (które w praktyce nie zawsze są ustawiane przez emulator terminala, mogą nie odzwierciedlać aktualnego stanu terminala lub mogły zostać zastąpione przez niektóre ustawienia użytkownika).
Gilles 'SO - przestań być zły'
1

Możesz po prostu użyć następującego polecenia:

locale charmap
ss32
źródło
1
To nie testuje terminala. Wyświetla tylko ustawienia regionalne.
grawitacja
1
curl http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt

lub

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

To oczywiście wymaga wgetlub curl.

Janus Troelsen
źródło
-1
UTF=$(echo -e "\u263A")
if [[ ! "$UTF" =~ "A" ]]  ; then
 echo -n "UNICODE here!"
fi
computermite
źródło
2
To nie testuje terminala. Sprawdza tylko, czy echowbudowane obsługuje \u.
grawitacja