terminal: menampilkan karakter khusus

11

Dalam beberapa program, seperti htopgaris dan bingkai tidak ditampilkan dengan benar. Sebaliknya, mereka ditampilkan sebagai -dan /.

masukkan deskripsi gambar di sini

Tetapi di komputer lain, mereka ditampilkan dengan benar sebagai garis yang tepat:

masukkan deskripsi gambar di sini

Saya tidak yakin apakah ini masalah terminal, atau jika mungkin beberapa paket diperlukan.

Dalam hal ini relevan: Sistem saya adalah Debian Wheezy, juru bahasa bashsaya dan emulator terminal sayagnome-terminal

Martin Vegter
sumber
Sudahkah Anda mencoba mengubah font yang digunakan oleh terminal?
goldilocks
2
Itu akan menjadi solusi yang mungkin jika karakter placeholder seperti kotak atau tanda tanya berada di tempat karakter Unicode, tetapi contohnya menunjukkan htopmenampilkan karakter ASCII. Namun, jika font terminal default adalah non-Unicode, maka kemungkinan encoding juga, jadi saya telah menambahkannya ke jawaban saya.
raehik

Jawaban:

11

Contoh teratas Anda berjalan dengan lokal non-Unicode (yaitu ASCII). Periksa variabel lingkungan $ LANG Anda (coba export | grep LANG); Anda kemungkinan besar tidak akan menemukan .UTF-8sufiks. Coba tambahkan:

export LANG=$LANG.UTF-8

Contoh Anda yang lain dijalankan dengan lokal UTF-8, yang seharusnya menjadi default untuk shell terbaru. Tampaknya htopmendeteksi lokal Anda dan menampilkan karakter ASCII atau Unicode - jadi di gambar bawah, Anda mendapatkan karakter Unicode yang bagus, sementara dengan ASCII Anda mendapatkan beberapa karakter seadanya. Saya sarankan mengubah lokal mesin gambar atas ke yang Unicode (lihat Lokal - Debian Wiki ).

Jika itu tidak berhasil, mungkin emulator terminal Anda yang menjadi masalah. Pengkodean default bisa berupa non-Unicode. Ubah penyandian default emulator terminal Anda ke UTF-8 (pada xfce4-terminalsaya menemukannya di tab Advanced). Jika Anda tidak bisa, mungkin font Anda saat ini tidak mendukung Unicode: coba ubah font Anda menjadi Unicode.

[Anehnya, saya menemukan begitu saya mengubah lokal saya menjadi ASCII sekali dalam sesi shell, htopselalu menampilkan karakter ASCII, bahkan setelah mengubahnya kembali. Itu mungkin masalah Anda, jika karena alasan tertentu Anda mengubah lokasi Anda di shell sesekali.]

raehik
sumber
3

Yang aneh adalah yang htopmenggunakan ncurses, yang dapat menggambar garis dengan / tanpa Unicode. Namun, melihat kode sumber dalam CRT.cmenunjukkan penjelasan:

#ifdef HAVE_LIBNCURSESW
   if(strcmp(nl_langinfo(CODESET), "UTF-8") == 0)
      CRT_utf8 = true;
   else
      CRT_utf8 = false;
#endif

   CRT_treeStr =
#ifdef HAVE_LIBNCURSESW
      CRT_utf8 ? CRT_treeStrUtf8 :
#endif
      CRT_treeStrAscii;

dan CRT_treeStrUtf8nilainya

const char *CRT_treeStrUtf8[TREE_STR_COUNT] = {
   "\xe2\x94\x80", // TREE_STR_HORZ ─
   "\xe2\x94\x82", // TREE_STR_VERT │
   "\xe2\x94\x9c", // TREE_STR_RTEE ├
   "\xe2\x94\x94", // TREE_STR_BEND └
   "\xe2\x94\x8c", // TREE_STR_TEND ┌
   "+",            // TREE_STR_OPEN +
   "\xe2\x94\x80", // TREE_STR_SHUT ─
};

Namun, ncurses (implementasi kutukan) memiliki simbol portabel untuk ini yang tidak bergantung pada apakah pengkodeannya UTF-8 atau tidak. Beberapa aplikasi (seperti dialog 's --ascii-linespilihan) memberikan pilihan untuk menggunakan ASCII line-menggambar, tetapi sebuah aplikasi yang bahkan tidak mencoba untuk menggunakan line-menggambar disediakan dalam ncurses tidak membuat penggunaan efektif dari perpustakaan tersebut.

Singkatnya, ketika Anda menemukan program yang berperilaku seperti itu, Anda harus melaporkannya sebagai bug kepada pengembang.

Bacaan lebih lanjut:

Thomas Dickey
sumber
Meskipun tidak secara langsung menyelesaikan masalah saya (pengaturan LANG/ LC_ALLmengaktifkan karakter garis Unicode yang diharapkan masuk htop), ini sangat menarik. Terima kasih telah meluangkan waktu untuk menjelaskannya!
wrksprfct