2013-02-04 39 views
19

में मान्य बेस 64 छवि स्ट्रिंग पर डीओएम अपवाद 5 INVALID वर्णक त्रुटि मैं एक छवि के लिए बेसिन स्ट्रिंग को बाइनरी में वापस डीकोड करने की कोशिश कर रहा हूं ताकि इसे ओएस द्वारा स्थानीय रूप से डाउनलोड और प्रदर्शित किया जा सके।डीओएम अपवाद 5 जावास्क्रिप्ट

डेटा यूआरआई प्रस्ताव (डेटा: आईएमजी/पीएनजी; बेस 64,) के साथ एक HTML IMG तत्व के स्रोत के रूप में डालते समय मैंने सफलतापूर्वक प्रस्तुत किया है, लेकिन एटोब फ़ंक्शन या गुग क्लोजर फ़ंक्शन का उपयोग करते समय यह विफल हो जाता है।

हालांकि डिकोडिंग सफल होता है जब यहाँ में डाल: http://www.base64decode.org/

कोई भी विचार?

संपादित करें: मैंने इसे अंतर्निहित जेएस फ़ंक्शन के अलावा अन्य लाइब्रेरी के साथ सफलतापूर्वक डीकोड करने के लिए प्राप्त किया। लेकिन, यह अभी भी स्थानीय रूप से नहीं खुल जाएगा - मैक पर यह कहता है कि यह क्षतिग्रस्त है या अज्ञात प्रारूप में है और इसे खोला नहीं जा सकता है।

कोड सिर्फ तरह कुछ है:

imgEl.src = 'data:img/png;base64,' + contentStr; //this displays successfully 
decodedStr = window.atob(contentStr); //this throws the invalid char exception but i just 
//used a different script to get it decode successfully but still won't display locally 

base64 स्ट्रिंग ही यहां प्रदर्शित करने के लिए बहुत लंबा है

उत्तर

36

मैं सिर्फ इस पर दीवार के खिलाफ मेरे सिर पीटने गया था (सीमा 30,000 वर्ण है) कुछ समय के लिए।

समस्या के कुछ संभावित कारण हैं। 1) यूटीएफ -8 समस्याएं। यहां एक अच्छा लिखना + इसके लिए एक समाधान है। http://monsur.hossa.in/2012/07/20/utf-8-in-javascript.html

मेरे मामले में, मुझे यह भी सुनिश्चित करना था कि एटोब पर जाने से पहले सभी व्हाइटस्पेस स्ट्रिंग से बाहर था। जैसे

function decodeFromBase64(input) { 
    input = input.replace(/\s/g, ''); 
    return atob(input); 
} 

क्या वास्तव में निराशा होती थी कि बेस 64 ठीक प्रकार से पार्स अजगर में बेस 64 लाइब्रेरी का उपयोग कर, लेकिन जे एस में नहीं था।

+0

धन्यवाद! यह एक जीवन बचतकर्ता है। बेस 64 में मेरा हास्यास्पद रूप से लंबा पीडीएफ था, और यह मोबाइल एप्लिकेशन में त्रुटि पैदा कर रहा था लेकिन वेब ब्राउजर में काम कर रहा था। रिक्त स्थान को हटाकर काम किया। – Amod

+0

इसके लिए धन्यवाद। मुझे एक ही समस्या थी लेकिन यह पिछली गाड़ी की वापसी थी जो सफारी में दिखाई दे रही थी। इसी पद्धति ने इसे ठीक किया। – echappy

+0

रेल स्पष्ट रूप से बेस 64 को अक्सर चॉप करते हैं, और क्रोम व्हाइटस्पेस को अनदेखा कर देगा जबकि सफारी नहीं होगा। आपके 'प्रतिस्थापन' सुझाव से मेरा ऐप फिर से सफारी पर काम कर रहा है। इसके लिए धन्यवाद! – Alex

3

मुझे बी 64 के सामने data:audio/wav;base64, को हटाना पड़ा, क्योंकि यह बी 64 के हिस्से के रूप में दिया गया था।

var data = b64Data.substring(b64Data.indexOf(',')+1);

var processed = atob(data);