2012-09-13 35 views
5

ठीक है, ठीक है यह मुझे पागल कर रहा है, lol।डेल्फी 7 - डीकोड बेस 64 का उपयोग TIdDecoderMIME

मेरे पास बेस 64 स्ट्रिंग है और मैं इसे TIdDecoderMIME का उपयोग करके एक TMemoryStream में डीकोड करने का प्रयास कर रहा हूं।

मेरे वर्तमान कोड इस प्रकार है:

Var MStream:TMemoryStream; Decoder:TIdDecoderMIME; 
begin 
    Decoder := TIdDecoderMIME.Create(nil); 
    MStream := TMemoryStream.Create; 
    Decoder.DecodeToStream(BSting,MStream); 
end; 

कहाँ BString = मेरे Base64 स्ट्रिंग।

अब जब कोड चलाया जाता है, तो मुझे एक त्रुटि संदेश मिलता है, "DecodeToString में असमान आकार"।

कोई भी विचार?

किसी भी मदद की बहुत सराहना की जाती है। धन्यवाद।

उत्तर

4

आप DecodeToStream पर जा रहे हैं एक बेस 64 स्ट्रिंग का काम करें जिसका लंबाई 4 का एक बहु नहीं है। दूसरे शब्दों में, जिस स्ट्रिंग को आप पास कर रहे हैं वह अमान्य है।

1

Base64 तार सामान्य रूप से पीछे चल रहे "=" संकेत यकीन है कि उनकी लंबाई के 4.

एक बहु कुछ डिकोडर लापता गद्दी वर्ण के लिए सही करने के लिए कोशिश करेंगे जबकि दूसरों को नहीं होगा है बनाने के लिए साथ गद्देदार कर रहे हैं। StackOverflow प्रश्न देखें "Remove trailing “=” when base64 encoding"

TIdDecoderMime ऑब्जेक्ट यह सुनिश्चित करके इनपुट को मान्य करता है कि यह 4 का एक बहु है - जो होगा यदि पैडिंग वर्ण इनपुट में शामिल किए जाएंगे।