एक साक्षात्कार प्रश्न के रूप में, यह आमतौर पर अपने आदेश को उलटने के लिए 8-बिट आइटमों के इन-प्लेस स्वैप करने के तकनीकी बिट्स के बारे में बस पूछा जाता है (इस बात की परवाह किए बिना कि कौन से वर्ण वास्तव में प्रतिनिधित्व कर सकते हैं)।
उसी समय, विशेषकर यदि आप किसी अपेक्षाकृत वरिष्ठ व्यक्ति का साक्षात्कार कर रहे हैं, तो आप कम से कम विनिर्देश के बारे में कुछ प्रश्न और इनपुट के सटीक रूप को सुनने की उम्मीद कर सकते हैं। यहां तक कि अगर आप उन्हें केवल 8-बिट आइटमों की अदला-बदली के सरल मामले में वापस निर्देशित करते हैं, तो यह जानना कि वे व्यापक शब्दों में सोचते हैं या नहीं, मूल्यवान हो सकता है।
यदि आपको इनपुट की एक विस्तृत श्रृंखला से निपटना है, तो आपको बस एक "स्टैक" के बारे में सोचना होगा, एक नेटवर्क स्टैक की तरह। आपको अपने सॉफ़्टवेयर को कई परतों में बनाना होगा, जिनमें से प्रत्येक एक विशिष्ट क्रम में परिवर्तनों का एक बहुत विशिष्ट सेट लागू करता है। यह आपको रूपांतरण के प्रत्येक भाग को सरल रखने की सुविधा देता है जिसे आप इसे नियंत्रण में रख सकते हैं, और इसे अपनी आवश्यकताओं को पूरा करने का एक उचित मौका दे सकते हैं।
मैं एक संभावना को रेखांकित करूंगा कि मुझे कम से कम कुछ काम करने योग्य मिला है। मैं यह स्वीकार करने वाला पहला व्यक्ति हूं कि अन्य लोग भी हो सकते हैं जिनके पास बेहतर विचार हैं। कम से कम मेरे लिए, यह थोड़ा वास्तविक लालित्य के साथ, ब्रूट-फोर्स इंजीनियरिंग जैसा लगता है।
आप सामान्य रूप से UCS-4 (उर्फ UTF-32) में किसी अन्य प्रतिनिधित्व को परिवर्तित करके शुरू करना चाहते हैं। इसके लिए, आप आमतौर पर उपयोगकर्ता से इनपुट पर भरोसा करना पसंद करेंगे , इसे अपने दम पर जानने का प्रयास करेंगे। कुछ मामलों में, आप यह सुनिश्चित कर सकते हैं कि ऑक्टेट का एक विशेष अनुक्रम किसी विशेष एन्कोडिंग योजना के नियमों का पालन नहीं करता है , लेकिन आप शायद ही कभी (यदि कभी भी) सुनिश्चित करें कि यह किसी विशेष एन्कोडिंग योजना का पालन करता है।
अगला चरण वैकल्पिक है। आप चार यूनिकोड सामान्यीकरण रूपों में से एक के लिए इनपुट को सामान्य कर सकते हैं। इस मामले में, आप संभवतः "एनएफकेसी" परिवर्तन लागू करना चाहेंगे: विहित संरचना के बाद अनुकूलता अपघटन। यह (जहां संभव हो) संयुक्त राजनैतिक रूपों (जैसे कि यू + 301 कि जॉन ने उल्लेख किया है) को एकल कोड बिंदुओं में परिवर्तित करता है (उदाहरण के लिए, "यू + 301" वाला "ए" "लैटिन राजधानी ए के साथ तीव्र" में परिवर्तित हो जाएगा। , यू + 00 सी 1)।
फिर आप शुरुआत से लेकर अंत तक सभी पात्रों के माध्यम से चलते हैं, स्ट्रिंग को वास्तविक पात्रों में तोड़ते हैं - और यदि (अभी भी) डियाक्रिटिक चिह्नों को जोड़ते हैं, तो वे उन पात्रों के साथ रखते हैं जो वे संशोधित करते हैं। इसका परिणाम आम तौर पर स्ट्रिंग में वास्तविक वर्णों का एक सूचकांक होगा, जैसे कि प्रत्येक की स्थिति और लंबाई।
आप उन पूर्ण वर्णों के क्रम को उल्टा करते हैं, आमतौर पर पिछले चरण में आपके द्वारा बनाए गए सूचकांक का उपयोग करके।
आप तब (फिर, वैकल्पिक रूप से) एक और यूनिकोड सामान्यीकरण प्रक्रिया लागू करते हैं, जैसे कि NFD (कैनोनिकल अपघटन)। यह उपरोक्त "लैटिन ए के साथ तीव्र" दो कोड बिंदुओं में बदल जाएगा - एक "लैटिन राजधानी ए" और एक "संयोजन संयोजन"। यदि आपका इनपुट एक U + 00C1 को रोकने के लिए के साथ शुरू करने के लिए, फिर भी हुआ है, यह भी बदल जाएगा कि दो कोड अंक में भी।
फिर आप वांछित एन्कोडिंग (UTF-8, UTF-16, आदि) में UCS-4 कोड बिंदुओं के अनुक्रम को एनकोड करते हैं।
ध्यान दें कि यूनीकोड के सामान्यीकरण के चरण स्ट्रिंग को संग्रहीत करने के लिए आवश्यक कोड बिंदुओं की संख्या को बदल सकते हैं, इसलिए यदि आप उन्हें शामिल करते हैं, तो आप परिणाम स्ट्रिंग पर मूल भंडारण में योजना नहीं बना सकते हैं। स्पष्ट रूप से पर्याप्त है, परिणामी कोड बिंदु सीधे इनपुट कोड बिंदुओं के अनुरूप नहीं हो सकते हैं।