उत्तर इस बात पर निर्भर करता है कि आप शीर्षक का उपयोग कैसे करना चाहते हैं। जाने के 3 बुनियादी तरीके हैं:
- बाइट्स जो यूटीएफ -8 एन्कोडेड स्ट्रिंग का प्रतिनिधित्व करते हैं।
यह प्रारूप है जिसका उपयोग आप अपने आवेदन के बाहर यूटीएफ -8 एन्कोडेड स्ट्रिंग को स्टोर करना चाहते हैं, इसे डिस्क पर रखें या इसे अपने प्रोग्राम के दायरे से बाहर या नेटवर्क पर भेजना चाहते हैं।
- यूनिकोड वर्णों की एक स्ट्रिंग।
वर्णों की अवधारणा पर्ल के लिए आंतरिक है। जब आप Encode::decode_utf8
निष्पादित करते हैं, तो पर्ल द्वारा देखे गए बाइट्स का एक गुच्छा वर्णों की एक स्ट्रिंग में परिवर्तित करने का प्रयास किया जाता है। पर्ल वीएम (और प्रोग्रामर लेखन पर्ल कोड) इनपुट पर यूटीएफ -8 बाइट्स को डीकोड करने और आउटपुट पर यूटीएफ -8 बाइट्स को एन्कोड करने के अलावा उस अवधारणा को बाहरी नहीं कर सकता है। उदाहरण के लिए, आपके प्रोग्राम को इनपुट के रूप में दो बाइट प्राप्त होते हैं जिन्हें आप जानते हैं कि वे यूटीएफ -8 एन्कोडेड वर्ण (ओं) का प्रतिनिधित्व करते हैं, मान लें कि 0xC3 0xB6
। उस स्थिति में decode_utf8
एक प्रतिनिधित्व देता है कि दो बाइट्स के बजाय, एक वर्ण देखता है: ö
।
फिर आप पर्ल में उस स्ट्रिंग में हेरफेर करने के लिए आगे बढ़ सकते हैं। आगे अंतर दर्शाने के लिए, निम्नलिखित कोड पर विचार करें:
my $bytes = "\xC3\xB6";
say length($bytes); # prints "2"
my $string = decode_utf8($bytes);
say length($string); # prints "1"
ASCII के विशेष मामले, UTF-8 के एक सबसेट।
एएससीआईआई यूनिकोड का एक बहुत छोटा सबसेट है, जहां उस श्रेणी के पात्रों को एक बाइट द्वारा दर्शाया जाता है। यूनिकोड को एएससीआईआई में कनवर्ट करना एक स्वाभाविक रूप से हानिकारक ऑपरेशन है, क्योंकि अधिकांश यूनिकोड वर्ण ASCII वर्ण नहीं हैं। आपको या तो अपनी स्ट्रिंग में हर चरित्र को छोड़ने के लिए मजबूर होना पड़ता है जो कि एएससीआईआई में नहीं है या यूनिकोड को मजबूर करने की कोशिश करते समय यूनिकोड चरित्र से अपने निकटतम ASCII समकक्षों (जो कि अधिकांश मामलों में संभव नहीं है) में मैप करने का प्रयास करता है। ASCII के लिए स्ट्रिंग।
जब से तुम विस्तृत चरित्र चेतावनी है, इसका मतलब है कि आपको लगता है कि ASCII या ISO-8859-1 के रूप में प्रतिनिधित्व नहीं किया जा सकता है (संभवतः उत्पादन) यूनिकोड वर्ण हेरफेर करने के लिए कोशिश कर रहे हैं।
यदि आपको स्ट्रिंग के रूप में अपने एक्सएमएल दस्तावेज़ से शीर्षक में हेरफेर करने की आवश्यकता नहीं है, तो मैं सुझाव दूंगा कि आप इसे यूटीएफ -8 बाइट्स के रूप में छोड़ दें (मैं उल्लेख करता हूं कि आपको सावधान रहना चाहिए कि बाइट्स और अक्षरों को मिश्रण न करें तार)। यदि आपको इसे कुशलतापूर्वक करने की आवश्यकता है, तो यूटीएफ -8 में इसे एन्कोड करें, फिर डीकोड करें, हेरफेर करें और आउटपुट करें।
आगे पढ़ने के लिए, perldoc
का इस्तेमाल करें अध्ययन करने के लिए perlunitut
, perlunifaq
, perlunicode
, perluniintro
, और Encode
।
तो मूल रूप से यह मुझे संदेह है। इस मुद्दे की मेरी समझ दूर थी। खैर, स्पष्टीकरण के लिए समय निकालने के लिए धन्यवाद। किसी कारण से मैंने सोचा कि मैं अपने यूटीएफ 8 स्ट्रिंग को कुछ एएससीआईआई फॉर्म में मजबूर करने में सक्षम हूं जो ऐसा लगता है कि यह सबसे अच्छा मैक्सी हैक होगा। मुझे लगता है कि मैं बस उतार जाऊंगा और यूटीएफ 8 एन्कोडिंग से निपटूंगा। –
यदि आपको यूटीएफ -8 को ASCII में परिवर्तित करना है, तो आप [टेक्स्ट :: यूनिडकोड] (http://search.cpan.org/perldoc?Text::Unidecode) चाहते हैं। – cjm
@cjm बिल्कुल मुझे क्या चाहिए। यह utf8 अक्षरों को निकटतम दृश्य ASCII विकल्प में परिवर्तित करता है। बहुत धन्यवाद! –