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ć?

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?


$ 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:


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}"'

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=

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

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.


-1
UTF=$(echo -e "\u263A")
if [[ ! "$UTF" =~ "A" ]]  ; then
 echo -n "UNICODE here!"
fi

2
To nie testuje terminala. Sprawdza tylko, czy echowbudowane obsługuje \u.
grawitacja
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.