Cara mendapatkan Pengkodean Karakter terminal

116

Sekarang saya mengubah pengkodean karakter gnome-terminal saya menjadi "GBK" (defaultnya adalah UTF-8), tetapi bagaimana saya bisa mendapatkan nilai (pengkodean karakter) di Linux saya?

Liang Wul
sumber

Jawaban:

108

Terminal menggunakan variabel lingkungan untuk menentukan himpunan karakter mana yang akan digunakan, oleh karena itu Anda dapat menentukannya dengan melihat variabel tersebut:

echo $LC_CTYPE

atau

echo $LANG
Valdis
sumber
4
Variabel lingkungan ini digunakan oleh aplikasi yang menggunakan terminal untuk I / O. Emulator terminal itu sendiri sama sekali tidak memiliki pengetahuan tentang mereka, dan pengkodean karakter yang efektif saat ini adalah pengaturan di suatu tempat dalam program emulator (anggota data di dalam kelas libvte dalam kasus Terminal GNOME).
JdeBP
1
urutan variabel yang disarankan di sini tidak baik. solusi yang lebih lengkap akan seperti ini: echo $ {LC_ALL: - $ {LC_CTYPE: - $ {LANG}}}. sekali lagi, variabel yang disetel bukan jaminan bahwa mereka valid, jadi Anda harus tetap menggunakan localeprogram (seperti yang terlihat pada jawaban lain di sini).
Mike Frysinger
Seperti yang dikatakan @JdeBP, terminal tidak menggunakan localevariabel lingkungan untuk menentukan pengkodeannya. Namun terminal dapat membiarkan aplikasi yang berinteraksi itu mengetahui pengkodeannya dengan mengatur localevariabel lingkungan. Misalnya, pada MacOS Anda dapat memilih pengkodean terminal dan opsional mengatur localevariabel lingkungan pada saat startup terminal di Terminal> Preferences> Profiles> Advanced.
Maggyero
97

locale perintah tanpa argumen akan mencetak nilai dari semua variabel lingkungan yang relevan kecuali untuk LANGUAGE.

Untuk pengkodean saat ini:

locale charmap

Untuk lokal yang tersedia:

locale -a

Untuk pengkodean yang tersedia:

locale -m
nyzm
sumber
1
Inilah yang berhasil untuk saya pada sistem CentOS. Ini menunjukkan pengkodean sistem berdasarkan pengaturan bahasa saat ini. Pengaturan terminal yang digunakan untuk mencapai mesin itu adalah cerita yang berbeda dan fungsi dari klien yang digunakan.
Phil DD
45

Periksa encoding dan bahasa:

$ echo $LC_CTYPE
ISO-8859-1
$ echo $LANG
pt_BR

Dapatkan semua bahasa:

$ locale -a

Ubah ke pt_PT.utf8:

$ export LC_ALL=pt_PT.utf8 
$ export LANG="$LC_ALL"
Moreno
sumber
16

Jika Anda memiliki Python:

python -c "import sys; print(sys.stdout.encoding)"
Martin Thoma
sumber
1
Dari semua penawaran di atas, satu-satunya saran yang bekerja pada kotak Slackware64 v. 14.2 saya adalah potongan python ini. Terima kasih!
Thomas Altfather Good
6

Sepengetahuan saya, tidak.

Indikasi tidak langsung dari $LC_CTYPE, localedan semacamnya mungkin tampak memikat, tetapi ini sepenuhnya terpisah dari pengkodean aplikasi terminal (sebenarnya emulator) yang kebetulan digunakan saat menampilkan karakter di layar.

Mereka satu-satunya cara untuk mendeteksi pengkodean dengan pasti adalah dengan mengeluarkan sesuatu yang hanya ada dalam pengkodean, misalnya ä, mengambil tangkapan layar, menganalisis gambar itu dan memeriksa apakah karakter keluaran sudah benar.

Jadi tidak, itu tidak mungkin, sayangnya.

pythonator
sumber
0

Untuk melihat informasi lokal menggunakan localeperintah saat ini. Di bawah ini adalah contoh di RHEL 7.8

[usr@host ~]$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Ashish Bhosle
sumber