मुख्य सामग्री पर जाएं

प्रतिशत एन्कोडिंग पैरामीटर

X API के कुछ हिस्सों में, खास तौर पर OAuth signatures से संबंधित हिस्सों में, स्ट्रिंग्स को RFC 3986, Section 2.1 के अनुसार एन्कोड करना आवश्यक होता है। चूँकि URL एन्कोडिंग algorithms के कई implementation पूरी तरह RFC 3986 के अनुरूप नहीं होते, गलत एन्कोडिंग OAuth signature errors का एक आम कारण है। इसी वजह से, उपयोग किए जाने वाले सटीक signing algorithm को इस पृष्ठ पर बताया गया है। इस पृष्ठ में RFC 3986, Section 2.1 में वर्णित URL एन्कोडिंग प्रक्रिया शामिल है। यदि इस दस्तावेज़ के साथ कोई अस्पष्टता या टकराव हो, तो हम आपको उस specification को संदर्भ के रूप में देखने की सलाह देते हैं।  

स्ट्रिंग को एन्कोड करना

निम्नलिखित एल्गोरिदम यह मानकर चलता है कि आप स्ट्रिंग SRC को उसकी वैल्यूज़ को बाइट-दर-बाइट स्ट्रिंग DST में कॉपी करके एन्कोड कर रहे हैं। चरण 1: जब तक SRC में अपठित बाइट मौजूद हैं, SRC से अगला बाइट (8 बिट) पढ़ें। आमतौर पर इसे एक वर्ण माना जाता है, लेकिन जिन एन्कोडिंग में एक वर्ण एक से अधिक बाइट का हो सकता है (जैसे UTF-8), उनमें केवल पहला बाइट पढ़ें। चरण 2: जाँच करें कि पढ़ा गया बाइट नीचे दिए गए किसी ASCII समकक्ष से मेल खाता है या नहीं। पठनीयता के लिए नीचे दी गई तालिका को कई पंक्तियों में बाँटा गया है, लेकिन आपको केवल यह तय करना है कि पढ़ा गया बाइट तालिका में कहीं मौजूद है या नहीं, यह नहीं कि वह किस विशेष पंक्ति में है।
नामASCII वर्णसमतुल्य बाइट मान
अंक‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39
अपरकेस अक्षर‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘O’, ‘P’, ‘Q’, ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’, ‘Y’, ‘Z’0x41, 0x42, 0x43, 0x44, 0x45,0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B,0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51,0x52, 0x53, 0x54, 0x55, 0x56, 0x57,0x58, 0x59, 0x5A
लोअरकेस अक्षर‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’, ‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’, ‘y’, ‘z’0x61, 0x62, 0x63, 0x64, 0x65,0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B,0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71,0x72, 0x73, 0x74, 0x75, 0x76, 0x77,0x78, 0x79, 0x7A
आरक्षित वर्ण‘-‘, ‘.’, ‘_’, ‘~’0x2D, 0x2E, 0x5F, 0x7E
चरण 2b: यदि बाइट ऊपर दी गई तालिका में सूचीबद्ध नहीं है, तो आगे बढ़ें। किसी भी अन्य मान को एन्कोड किया जाना चाहिए। चरण 2a: यदि बाइट ऊपर दी गई तालिका में सूचीबद्ध है, तो उसे DST में कॉपी करें और चरण 1 पर वापस जाएँ। ऊपर दी गई तालिका में सूचीबद्ध वर्णों को एस्केप करने की आवश्यकता नहीं है, इसलिए आप उस बाइट को सीधे कॉपी कर देंगे। चरण 3: DST में ‘%’ वर्ण लिखें। प्रतिशत चिह्न ‘%’ (या hex में 0x25 और binary में 00100101) यह बताता है कि अगले दो बाइट एक एन्कोड किए गए बाइट को दर्शाएँगे। चरण 4: वर्तमान बाइट के uppercase ASCII-encoded hex मान को दर्शाने वाले दो वर्ण DST में लिखें। यह थोड़ा भ्रमित करने वाला लग सकता है, इसलिए यहाँ एक उदाहरण दिया गया है। मान लें कि वर्तमान बाइट 0xE6 है (binary में 11100110)। यह ‘æ’ के UTF-8 encoded मान से मेल खाता है। इस मान को एन्कोड करने के लिए, DST में पहले ‘E’ (0x45, ऊपर दी गई तालिका से) और फिर ‘6’ (0x36) लिखें। लिखे गए अंतिम तीन वर्ण “%E6” होने चाहिए। ध्यान दें कि यदि आप A,B,C,D,E या F जैसा कोई अक्षर लिखते हैं, तो उसका uppercase रूप ही इस्तेमाल करना होगा। चरण 5: चरण 1 पर वापस जाएँ। जब तक SRC पूरी तरह DST में कॉपी न हो जाए, यह प्रक्रिया जारी रखें।  

उदाहरण

नीचे दिए गए उदाहरण आपके अपने कोड के आउटपुट की तुलना करने में सहायक हो सकते हैं। किसी भी अंतर को आपको त्रुटि मानना चाहिए। स्पेस को “+” वर्णों के रूप में एन्कोड करना गलत एन्कोडिंग का एक उदाहरण है।
मूल स्ट्रिंगएन्कोड की गई स्ट्रिंग
Ladies + GentlemenLadies%20%2B%20Gentlemen
An encoded string!An%20encoded%20string%21
Dogs, Cats & MiceDogs%2C%20Cats%20%26%20Mice
%E2%98%83