Terminalin Karakter Kodlaması nasıl alınır


Yanıtlar:


108

Terminal, hangi karakter setinin kullanılacağını belirlemek için ortam değişkenlerini kullanır, bu nedenle bu değişkenlere bakarak bunu belirleyebilirsiniz:

echo $LC_CTYPE

veya

echo $LANG

4
Bu ortam değişkenleri, G / Ç için terminali kullanan uygulamalar tarafından kullanılır. Terminal öykünücüsünün kendisi bunlarla ilgili hiçbir bilgiye sahip değildir ve halihazırda etkili karakter kodlaması, öykünücü programı (GNOME Terminali durumunda bir libvte sınıfı içindeki bir veri üyesi) içinde bir yerde bir ayardır.
JdeBP

1
burada önerilen değişkenlerin sıralaması iyi değil. daha eksiksiz bir çözüm şunun gibi bir şey olabilir: echo $ {LC_ALL: - $ {LC_CTYPE: - $ {LANG}}}. sonra tekrar, ayarlanan değişken geçerli olduklarının bir garantisi değildir, bu yüzden localeprograma bağlı kalmalısınız (buradaki diğer cevaplarda görüldüğü gibi).
Mike Frysinger

@JdeBP bahsedilen gibi, terminal etmez olmayan kullanımı localeda kodlama belirlemek için ortam değişkenleri. Ancak uçbirim, localeortam değişkenlerini ayarlayarak kendisiyle etkileşim kuran uygulamaların kodlamasını bilmesini sağlayabilir. Örneğin, MacOS üzerinde terminal kodlamasını seçebilir ve isteğe bağlı olarak ayarlanmış localeterminal başlangıçta ortam değişkenleri Terminal> Preferences> Profiles> Advanced.
Maggyero

97

locale argümansız komut, LANGUAGE dışındaki tüm ilgili ortam değişkenlerinin değerlerini yazdıracaktır.

Mevcut kodlama için:

locale charmap

Mevcut yerel ayarlar için:

locale -a

Mevcut kodlamalar için:

locale -m

1
Bu benim için bir CentOS sisteminde işe yarayan şeydi. Mevcut dil ayarlarına göre sistem kodlamasını gösterdi. Bu makineye ulaşmak için kullanılan terminal ayarları farklı bir hikaye ve kullanılan müşterinin bir işlevidir.
Phil DD

45

Kodlamayı ve dili kontrol edin:

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

Tüm dilleri alın:

$ locale -a

Pt_PT.utf8 olarak değiştirin:

$ export LC_ALL=pt_PT.utf8 
$ export LANG="$LC_ALL"

16

Python'unuz varsa:

python -c "import sys; print(sys.stdout.encoding)"

1
Yukarıdaki tüm teklifler arasında Slackware64 v. 14.2 kutumda çalışan tek öneri bu python pasajıydı. Teşekkürler!
Thomas Altfather Good

6

Bildiğim kadarıyla hayır.

Dan Duruma endikasyonlar $LC_CTYPE, localeve bu kudreti çekici gibi, ama bunlar tamamen terminal uygulamasını kodlayan (aslında bir emülatör) ayrılan ekran üzerinde özellikler sergileyen zaman kullanarak olur edilir.

Kodlamayı kesin olarak tespit etmenin tek yolu, yalnızca kodlamada mevcut olan bir şeyi äçıkarmaktır , örneğin , bir ekran görüntüsü almak, bu görüntüyü analiz etmek ve çıktı karakterinin doğru olup olmadığını kontrol etmektir.

Yani hayır, ne yazık ki mümkün değil.


0

Mevcut yerel bilgileri görmek için localecommand komutunu kullanın. Aşağıda RHEL 7.8 ile ilgili bir örnek bulunmaktadır.

[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=
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.