UTF-8 को 'कम' कमांड हैंडल कैसे करें?


31

मेरे मैक टर्मिनल पर, UTF-8 का मुद्रण सामान्य रूप से काम करता है, लेकिन यह lessसही ढंग से काम नहीं करता है।

तो यह सही ढंग से काम करता है:

$  echo -e '\xe2\x82\xac'   
€

लेकिन इसे कम में पाइप करने से कुछ ऐसा होता है:

$  echo -e '\xe2\x82\xac' | less  
<E2><82><AC>

इसे कैसे सुधारा जा सकता है?

निदान के लिए:

मैं मैक ओएस 10.6.8 का उपयोग कर रहा हूं। कम संस्करण 418, टर्मिनल 2.1.2 (273.1)।

मेरे स्थान का आउटपुट यह है:

$ locale
LANG="en_US.UTF-8"
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL="C"

जवाबों:


43

ठीक है, मुझे कुछ गोलगप्पे खाने के बाद जवाब मिला। जाहिर है, LESSCHARSETइस तरह सेट किया जाना चाहिए:

export LESSCHARSET=utf-8

अब lessमेरे लिए ठीक काम करता है।


मुझे CentOS पर यही समस्या थी। यह लाइन भी वहीं तय कर दी।
डेबलाउवे

9
मेरे लिए जो समस्या हल की गई थी वह less -r"कच्चे" नियंत्रण वर्णों को प्रदर्शित कर रही थी
वॉल्ड्रिअस

यह डेबियन 8 में भी काम करता है, धन्यवाद!
लुकफेर्रारियो

किसी को यह उत्तर स्वीकार करना चाहिए! यह समस्या को हल करता है।
लेंसोवेट

2
less -rएक ही बात करता है, लेकिन इमोजीस को भी सही ढंग से संभालता है, जो export LESSCHARSET=utf-8नहीं करता है।
नूह ससम्मान

6

यदि आप कुछ यूनिकोड वर्ण देख सकते हैं less, लेकिन lessइमोजी प्रदर्शित करने में असमर्थ हैं , तो lessअधिक हाल के संस्करण में अपग्रेड करने का प्रयास करें । मैक ओएस एक्स पर, मैं संस्करण 458 से 481 तक चला गया और जिसने मेरी समस्या को ठीक किया (उदाहरण के लिए, git logअब प्रतिबद्ध संदेशों में इमोजी प्रदर्शित कर सकते हैं)।

यदि आपके पास होमब्रेव है, तो आप सिस्टम को एक नए संस्करण के साथ कम कर सकते हैं brew install homebrew/dupes/less


धन्यवाद! होमब्रे के नए संस्करणों के साथ, आपको बस brew install lessअपग्रेड प्राप्त करने की आवश्यकता है ।
एलेक्स कमीनियन

2

मेरे साथ काम करता है

LANG=
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="en_US.UTF-8"

3
LC_CTYPE महत्वपूर्ण है। हालाँकि, कम उपयोग के नियम विचित्र हैं: लोकेल से एन्कोडिंग पुनर्प्राप्त करने के बजाय, यह इसके नाम में स्ट्रिंग "utf-8" (या कुछ अन्य संभावनाएं) की तलाश करता है। यदि आप कुछ चाहते हैं तो आपको LESSCHARSET का उपयोग करना होगा। अन्य एन्कोडिंग या यदि आपका स्थानीय नाम कम पूर्वधारणाओं से मेल नहीं खाता है।
रिचर्ड केटलवेल

1

मैंने इस पर ध्यान दिया और निम्नलिखित पर्यावरण चर की कोशिश की, जो मेरे लिए काम करते हैं:

export LC_ALL=en_US.UTF-8
export LANG=en_us.UTF-8

देखकर के रूप में मैं कई अलग अलग जवाब में LC_ALL लगता है मुझे लगता है कि यह सही है। लेकिन शायद एकमात्र सही उत्तर नहीं है, बेशक इस प्रश्न के अधिक सही उत्तर हो सकते हैं।

वैसे भी कुछ और googling ने मुझे चर के लिए यह विवरण दिया:

LC_ALL यह चर सभी स्थानीय श्रेणियों के लिए मान निर्धारित करता है। LC_ALL पर्यावरण चर का मान LC_C (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMICIC, LC_TIME) और LANG पर्यावरण चर के साथ शुरू होने वाले किसी भी अन्य पर्यावरण चर पर पूर्वता है।

स्रोत: http://pubs.opengroup.org/onlinepubs/007908799/xbd/envvar.html

मुझे लगता है कि यह उन सभी पर शासन करने के लिए भाषा चर है :)


कृपया less'संस्करण संख्या पोस्ट करने के लिए स्वतंत्र महसूस करें ।
हिरण हंटर

यकीन है, कम 458 (GNU नियमित अभिव्यक्तियाँ)
मेल्विन लूज़

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.