Cara mengetahui apakah terminal mendukung UTF-8


21

Saya sedang menyiapkan modul CPAN untuk perl pada CentOs 5, dan salah satu pertanyaannya adalah 'Apakah terminal Anda mendukung UTF-8?' (diparafrasekan). Bagaimana saya mengetahuinya?

Jawaban:


15

Sungguh, cara jitu untuk menguji adalah dengan mengunduh file teks dan memasukkannya ke terminal dan melihat apakah semuanya terlihat baik-baik saja.

atau, jika Anda bisa, kompilasi ulang terminal yang mengaktifkan opsi unicode (dengan asumsi ada satu).

seperti apa bentuk $ TERM dan $ LANG?


$ TERM adalah "xterm" $ LANG adalah "en_US.UTF-8" (aha!) File teks ditampilkan dengan baik di terminal, tetapi anehnya, tidak di Firefox.
Whatsit

ya, saya benar-benar mengalami hal yang sama: - / ... ketika saya mencoba saran therek, saya mendapat tanda tanya
theman_on_osx

$ LANG hanya memberi tahu Anda apa yang akan digunakan sistem Anda saat menulis ke stdout / stderr. Itu tidak mengatakan apa-apa tentang kemampuan terminal. Namun, jika semua sistem Anda mencetak karakter aneh terlihat ok, maka terminal Anda mungkin mendukung UTF-8.
Epcylon

3
Ini bahkan dapat diotomatisasi, dengan menampilkan beberapa teks dan memeriksa lebarnya (dengan membaca posisi kursor sebelum dan sesudah). Saya memposting bukti konsep proposal sesuatu yang lain.
Gilles 'SO- stop being evil'

@Gilles, jawaban Anda sangat sederhana. Suka!

20

Ketikkan ini di terminal Anda:

echo -e '\xe2\x82\xac' 

Jika terminal Anda mendukung UTF-8, itu akan menampilkan tanda euro:


Tidak semua font memiliki tanda euro, jadi titik kode tes yang berbeda mungkin disarankan.
Michael Hampton

5

Cara paling lama: jalankan mengikuti dan periksa output. Ini akan menjadi modal O dengan sirkumfleks jika terminal menampilkan UTF-8.

perl -le 'print "\x{c3}\x{94}"'

Saya cukup yakin terminal saya mendukung UTF-8 sekarang (lulus tes yang disarankan oleh theman_on_osx) tetapi ini hanya menghasilkan baris kosong. Apa yang sedang terjadi?
Whatsit

Mungkin font yang Anda gunakan di aplikasi terminal Anda tidak mendukung karakter UTF-8.
therek

4
Saya tahu ini sangat terlambat tetapi bendera UTF-8 Out membuat itu bekerja lebih baikperl -CO -le 'print "\x{d4}"'
Ashley

3
Atau tanpa opsi -CO, berikan Perl byte UTF-8 yang benar: $ perl -le 'print "\ x {c3} \ x {94}"' Ô
Tim

2

Cara api yang paling pasti adalah dengan menggunakan perintah 'lokal'. Ini akan mencetak semua variabel beragam dan beragam yang menentukan karakter apa yang akan digunakan. Sebagai contoh, ini adalah output saya di RHEL5.3, diatur untuk hanya menggunakan UTF-8 secara 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=

1
Ini tidak menguji terminal, hanya pengaturan lokal (yang dalam praktiknya tidak selalu ditetapkan oleh emulator terminal, mungkin tidak mencerminkan keadaan terminal saat ini, atau mungkin telah ditimpa oleh beberapa konfigurasi pengguna).
Gilles 'SO- stop being evil'

1

Anda bisa menggunakan perintah berikut:

locale charmap

1
Ini tidak menguji terminal. Ini hanya menampilkan pengaturan lokal.
grawity

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

atau

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

Ini jelas membutuhkan wgetatau curl.


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

2
Ini tidak menguji terminal. Ini hanya menguji apakah echodukungan builtin \u.
grawity
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.