टर्मिनल का कैरेक्टर एनकोडिंग कैसे प्राप्त करें


116

अब मैं अपने gnome-टर्मिनल के चरित्र एन्कोडिंग को "GBK" में बदल देता हूं (डिफ़ॉल्ट रूप से यह UTF-8 है), लेकिन मैं अपने लिनक्स में मूल्य (वर्ण एन्कोडिंग) कैसे प्राप्त कर सकता हूं?


जवाबों:


108

टर्मिनल पर्यावरण चर का उपयोग करता है यह निर्धारित करने के लिए कि किस वर्ण का उपयोग करना है, इसलिए आप उन चर को देखकर यह निर्धारित कर सकते हैं:

echo $LC_CTYPE

या

echo $LANG

4
इन पर्यावरण चर का उपयोग उन अनुप्रयोगों द्वारा किया जाता है जो I / O के लिए टर्मिनल का उपयोग कर रहे हैं। टर्मिनल एमुलेटर को स्वयं उनके बारे में कोई जानकारी नहीं है, और वर्तमान में प्रभावी चरित्र एन्कोडिंग एमुलेटर प्रोग्राम (जीएनओएम टर्मिनल के मामले में एक libvte वर्ग के अंदर एक डेटा सदस्य) के भीतर एक सेटिंग है।
JdeBP

यहाँ सुझाए गए चरों का क्रम अच्छा नहीं है। एक और पूर्ण समाधान कुछ इस तरह होगा: गूंज $ {LC_ALL: - $ {LC_CTYPE: - $ {LANG}}}। तब फिर से, चर सेट किया जा रहा है गारंटी नहीं है कि वे वैध हैं, इसलिए आपको localeकार्यक्रम से चिपके रहना चाहिए (जैसा कि यहां अन्य उत्तरों में देखा गया है)।
माइक फ़्रीसिंजर

जैसा @JdeBP ने कहा, टर्मिनल एन्कोडिंग को निर्धारित करने के लिए पर्यावरण चर का उपयोग नहीं करता है locale। टर्मिनल हालांकि उन अनुप्रयोगों को दे सकता है जो इसे इंटरेक्ट करते हैं और localeपर्यावरण चर को सेट करके इसकी एन्कोडिंग को जानते हैं । उदाहरण के लिए, MacOS पर आप टर्मिनल एन्कोडिंग चुनें, और वैकल्पिक रूप से सेट कर सकते हैं localeमें टर्मिनल स्टार्टअप पर वातावरण चर Terminal> Preferences> Profiles> Advanced
मैगीयरो

97

locale बिना किसी तर्क के कमांड, LANGUAGE को छोड़कर सभी प्रासंगिक पर्यावरण चर के मूल्यों को प्रिंट करेगा।

वर्तमान एन्कोडिंग के लिए:

locale charmap

उपलब्ध स्थानों के लिए:

locale -a

उपलब्ध एन्कोडिंग के लिए:

locale -m

1
यह मेरे लिए एक CentOS प्रणाली पर काम किया है। इसने वर्तमान भाषा सेटिंग के आधार पर सिस्टम एन्कोडिंग दिखाया। उस मशीन को प्राप्त करने के लिए उपयोग की जाने वाली टर्मिनल सेटिंग्स एक अलग कहानी है और क्लाइंट के एक फ़ंक्शन का उपयोग किया जा रहा है।
फिल डीडी

45

एन्कोडिंग और भाषा जांचें:

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

सभी भाषाएँ प्राप्त करें:

$ locale -a

Pt_PT.utf8 में बदलें:

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

16

यदि आपके पास पायथन है:

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

1
उपरोक्त सभी पेशकशों में से एकमात्र सुझाव जिसने मेरे स्लैकवेयर 64 वी। 14.2 बॉक्स पर काम किया, वह अजगर का स्निपेट था। धन्यवाद!
थॉमस अल्फादर अच्छा

6

मेरी जानकारी के लिए, नहीं।

परिसमापक संकेत $LC_CTYPE,locale और इस तरह आकर्षक लग सकता है, लेकिन ये पूरी तरह से टर्मिनल अनुप्रयोग (वास्तव में एक एमुलेटर) एन्कोडिंग से अलग हो जाते हैं जब स्क्रीन पर वर्ण प्रदर्शित करते हैं।

वे केवल यह सुनिश्चित करने के लिए एन्कोडिंग का पता लगाने का एक तरीका है कि केवल एन्कोडिंग में मौजूद किसी चीज़ का उत्पादन करना, जैसे ä , एक स्क्रीनशॉट लें, उस छवि का विश्लेषण करें और जांचें कि आउटपुट कैरेक्टर सही है या नहीं।

तो नहीं, यह संभव नहीं है, दुख की बात है।


0

वर्तमान स्थानीय जानकारी देखने के लिए localeकमांड का उपयोग करें । नीचे 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=
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.