टर्मिनल: विशेष वर्ण प्रदर्शित करना


11

कुछ कार्यक्रमों में, जैसे htopकि लाइनें और फ्रेम सही ढंग से प्रदर्शित नहीं होते हैं। इसके बजाय, वे प्रदर्शित होते हैं -और /

यहाँ छवि विवरण दर्ज करें

लेकिन एक अन्य मशीन पर, उन्हें उचित लाइनों के रूप में सही ढंग से प्रदर्शित किया जाता है:

यहाँ छवि विवरण दर्ज करें

मुझे यकीन नहीं है कि यह एक टर्मिनल मुद्दा है, या शायद कुछ पैकेज आवश्यक है।

मामले में यह प्रासंगिक है: मेरा सिस्टम डेबियन व्हीजी है, मेरा दुभाषिया है bashऔर मेरा टर्मिनल एमुलेटर हैgnome-terminal


क्या आपने टर्मिनल द्वारा उपयोग किए गए फ़ॉन्ट को बदलने की कोशिश की है?
गोल्डीलॉक्स

2
यदि यूनिकोड वर्णों के स्थान पर बॉक्स या प्रश्न चिह्न जैसे प्लेसहोल्डर वर्ण होते हैं, तो यह एक संभव समाधान होगा, लेकिन उसका उदाहरण htopASCII वर्णों को प्रदर्शित करता है। हालाँकि, यदि डिफ़ॉल्ट टर्मिनल फ़ॉन्ट गैर-यूनिकोड है, तो एन्कोडिंग की संभावना भी है, इसलिए मैंने अपने उत्तर में इसे जोड़ दिया है।
राहीक

जवाबों:


11

आपका शीर्ष उदाहरण एक गैर-यूनिकोड लोकेल (यानी ASCII) के साथ चल रहा है। अपने $ LANG पर्यावरण चर (कोशिश export | grep LANG) की जाँच करें ; आप सबसे अधिक एक .UTF-8प्रत्यय नहीं पाएंगे । इसे जोड़ने का प्रयास करें:

export LANG=$LANG.UTF-8

आपका अन्य उदाहरण UTF-8 लोकेल के साथ चल रहा है, जो हाल के गोले के लिए डिफ़ॉल्ट होना चाहिए। ऐसा लगता htopहै कि आपके स्थान का पता लगाता है और या तो ASCII या यूनिकोड वर्ण प्रदर्शित करता है - इसलिए नीचे के चित्र में, आपको अच्छा यूनिकोड वर्ण मिलते हैं, जबकि ASCII के साथ आपको कुछ सुंदर चित्र मिल जाते हैं। मैं सुझाव देता हूं कि शीर्ष चित्र की मशीन के स्थान को एक युनिकोड एक में बदल दें ( लोकेल - डेबियन विकी देखें )।

यदि वह काम नहीं करता है, तो हो सकता है कि आपका टर्मिनल एमुलेटर समस्या है। डिफ़ॉल्ट एन्कोडिंग गैर-यूनिकोड हो सकता है। अपने टर्मिनल एमुलेटर की डिफ़ॉल्ट एन्कोडिंग को UTF-8 में बदलें ( xfce4-terminalमुझे यह उन्नत टैब में मिला)। यदि आप नहीं कर सकते हैं, तो हो सकता है कि आपका वर्तमान फ़ॉन्ट यूनिकोड का समर्थन न करे: अपने फॉन्ट को एक यूनिकोड में बदलने का प्रयास करें।

[अजीब बात है, मैंने पाया कि एक बार शेल सत्र में मैंने अपना लोकेशन बदलकर ASCII कर लिया था, htopहमेशा ASCII के पात्रों को प्रदर्शित करता है, यहां तक ​​कि इसे वापस बदलने के बाद भी। यह आपका मुद्दा हो सकता है, यदि किसी कारण से आप अपने शेल में कभी-कभी अपना स्थान बदल रहे हों।]


3

विषम बात यह है कि htopncurses का उपयोग करता है, जो यूनिकोड के साथ / बिना लाइनों को खींच सकता है। हालाँकि, CRT.cस्पष्टीकरण को दर्शाने में स्रोत-कोड को देखना:

#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;

और CRT_treeStrUtf8मूल्य है

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 ─
};

हालांकि, ncurses (किसी भी शाप कार्यान्वयन) में इन के लिए पोर्टेबल प्रतीक हैं जो इस बात पर भरोसा नहीं करते हैं कि एन्कोडिंग UTF-8 है या नहीं। कुछ एप्लिकेशन (जैसे डायलॉग का --ascii-linesविकल्प) ASCII लाइन-ड्राइंग का उपयोग करने के लिए एक विकल्प प्रदान करते हैं , लेकिन एक एप्लिकेशन जो ncurses में प्रदान की गई रेखा-ड्राइंग का उपयोग करने का प्रयास नहीं करता है, वह लाइब्रेरी का प्रभावी उपयोग नहीं कर रहा है।

संक्षेप में, जब आप उस तरह का व्यवहार करते हैं, तो आपको डेवलपर्स के लिए बग के रूप में रिपोर्ट करना चाहिए।

आगे की पढाई:


हालांकि यह सीधे मेरी समस्या को हल नहीं करता था ( अपेक्षित यूनिकोड लाइन ड्राइंग चार्ट में सेटिंग LANG/ स्थापित LC_ALLकरता है htop), यह बहुत दिलचस्प है। यह समझाने के लिए समय निकालने के लिए धन्यवाद!
wrrprfct
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.