मैं एक URL में इसे डालने के लिए डेटा को आधार बनाना और फिर इसे अपने HttpHandler के भीतर डिकोड करना चाहता हूं।
मैंने पाया है कि Base64 एनकोडिंग एक '/' वर्ण के लिए अनुमति देता है जो मेरे UriTemplate मिलान को गड़बड़ कर देगा। तब मैंने पाया कि विकिपीडिया से "URL के लिए संशोधित Base64" की एक अवधारणा है:
URL वेरिएंट के लिए एक संशोधित बेस 64 मौजूद है, जहां कोई भी पैडिंग '=' का उपयोग नहीं किया जाएगा, और मानक बेस 64 के '+' और '/' वर्ण क्रमशः '-' और '_' द्वारा प्रतिस्थापित किए जाते हैं, ताकि URL एनकोडर / डिक्रोजर का उपयोग किया जा सके अब आवश्यक नहीं है और एन्कोडेड वैल्यू की लंबाई पर कोई प्रभाव नहीं पड़ता है, रिलेशनल डेटाबेस, वेब फॉर्म और सामान्य रूप से ऑब्जेक्ट पहचानकर्ताओं में उपयोग के लिए एक ही एन्कोडेड फॉर्म को बरकरार रखता है।
.NET का उपयोग करके मैं अपने वर्तमान कोड को मूल बेस 64 एन्कोडिंग करने और "URL के लिए संशोधित बेस 64" का उपयोग करने के लिए डिकोडिंग करना चाहता हूं। क्या किसी ने ऐसा किया है?
डीकोड करने के लिए, मुझे पता है कि यह कुछ इस तरह से शुरू होता है:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
लेकिन, मुझे अंत में एक या दो '=' वर्ण जोड़ने की आवश्यकता है जो थोड़ा अधिक जटिल दिखता है।
मेरा एन्कोडिंग तर्क थोड़ा सरल होना चाहिए:
// Perform normal base64 encoding
byte[] encodedBytes = Encoding.UTF8.GetBytes(unencodedText);
string base64EncodedText = Convert.ToBase64String(encodedBytes);
// Apply URL variant
string base64UrlEncodedText = base64EncodedText.Replace("=", String.Empty).Replace('+', '-').Replace('/', '_');
मैंने URL स्टैकऑवरफ़्लो प्रविष्टि के लिए बेस 64 को गाइड देखा है , लेकिन इसकी एक ज्ञात लंबाई है और इसलिए वे अंत में आवश्यक समान संकेतों की संख्या को हार्डकोड कर सकते हैं।