(इसे एक चुटकी नमक के साथ लें) जहां तक मुझे याद है, समस्या libiconv
काम करने के तरीके में निहित है । मल्टी-बाइट एन्कोडिंग को उन्हें डिकोड करने के लिए एक राज्य मशीन की आवश्यकता होती है, और libiconv
पूरे वर्ण प्राप्त करना पसंद करते हैं, इसलिए आप इसे केवल एक फ़ंक्शन कॉल में आधा चरित्र और अगले आधे भाग में नहीं दे सकते।
मैं एक और दो समाधानों के बारे में सोच सकता हूं, एक अच्छा आउट-ऑफ-बैंड तरीका है, दूसरा एक इन-बैंड हैक है।
टर्मिनल एमुलेटर एन्कोडिंग बदलें (आउट-ऑफ-बैंड) : एक आपके टर्मिनल एमुलेटर में कैरेक्टर एन्कोडिंग को बदलना है, इसलिए इसका मूल एन्कोडिंग शिफ्ट JIS है। मैंने अभी जाँच की है konsole
, और यह समर्थन करता है। मेनू से, व्यू → कैरेक्टर एन्कोडिंग → जेपनीज़ → एसजिस। आप तब केवल tail -f
फ़ाइल कर सकते हैं , और konsole
मल्टीबीट वर्णों को डिकोड करने और उन्हें फ़ॉन्ट ग्लिफ़ तक मिलान करने का ध्यान रखेंगे।
फ्लाई पर ट्रांसकोड टर्मिनल एन्कोडिंग (इन-बैंड; सर्वश्रेष्ठ) : गाइल्स के सौजन्य से, जिसने मुझे luit
बहुत लंबे समय के बाद याद दिलाया । उपयोग luit
, जो आपके XOrg वितरण (डेबियन पर, यह पैकेज है x11-utils
) के साथ आना चाहिए था । इसे इस तरह उपयोग करें:
$ luit -encoding SJIS -- tail -f x
यह टर्मिनल ट्रांसकोड SJIS / को आपके टर्मिनल एन्कोडिंग से / और रन करेगा tail -f x
। इसका नकारात्मक पक्ष luit
यह है कि यह समर्थित एनकोडिंग के धन का समर्थन नहीं करता है libiconv
। उल्टा यह लगभग हर जगह उपलब्ध है।
फ्लाई (इन-बैंड; हैक) पर ट्रांसकोड टर्मिनल एन्कोडिंग : ttyconv
एक हैक है जिसे मैंने कई साल पहले लिखा था (शुरुआत में सी, बाद में पायथन में फिर से बनाया गया) जो libiconv
ट्रांसकोड टर्मिनल I / O का उपयोग करता है। यह एक नया pseudoterminal और (a) आपके स्थानीय कोडिंग से आपके द्वारा लिखे गए वर्णों को दूरस्थ एन्कोडिंग में ट्रांसकोड करता है, और (b) आपके द्वारा दूरस्थ एन्कोडिंग से प्राप्त वर्णों को आपके स्थानीय एन्कोडिंग में ट्रांसकोड करता है। मैंने इसका उपयोग उन सर्वरों से बात करने के लिए किया था जो मानक लिनक्स टर्मिनलों द्वारा समर्थित नहीं थे। कृपया ध्यान दें कि मैंने जिन रिमोट एनकोडिंग के साथ इसका परीक्षण किया था, वे सभी सिंगल-बाइट एन्कोडिंग थे, इसलिए मैं यह गारंटी नहीं दे सकता कि यह शिफ्ट JIS के लिए काम करेगा। मुझे अक्सर इन दिनों इसका उपयोग करने के लिए कॉल नहीं मिलता है, अधिकांश सिस्टम यूनिकोड पर स्विच करते हैं।
इस तरह से आप इसका उपयोग करेंगे:
$ ttyconv -rsjis -- tail -f x
नकारात्मक पक्ष यह ttyconv
है कि मैंने इसे लिखा था, कोई भी इसका उपयोग नहीं करता है लेकिन मुझे, यह शायद कीड़े से भरा है। मैं इस पर उत्कृष्टता। उल्टा यह है कि यह उपयोग करता है libiconv
, इसलिए यदि आपका एन्कोडिंग असामान्य है, तो यह आपकी सबसे अच्छी शर्त है। अंतिम गणना में, ttyconv --list
100 एनकोडिंग का समर्थन करता है।