2012-09-13 34 views
5

OK, đây là điều khiến tôi phát điên, lol.Delphi 7 - Giải mã Base64 Sử dụng TIdDecoderMIME

Tôi có chuỗi Base64 và đang cố gắng giải mã nó thành TMemoryStream bằng TIdDecoderMIME.

mã hiện tại của tôi là như sau:

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

đâu BString = My chuỗi Base64.

Bây giờ khi mã được chạy, tôi nhận được thông báo lỗi cho biết "Kích thước không đồng đều trong DecodeToString".

Bất kỳ ý tưởng nào?

Bất kỳ trợ giúp nào được đánh giá cao. Cảm ơn.

Trả lời

4

Bạn đang chuyển đến hàm DecodeToStream chuỗi Base64 có độ dài không phải là bội số của 4. Nói cách khác, chuỗi bạn đang truyền không hợp lệ.

1

chuỗi Base64 thường đệm bằng dấu "=" dấu hiệu để đảm bảo chiều dài là bội số của 4.

Một số bộ giải mã sẽ cố gắng sửa chữa cho các ký tự đệm mất tích trong khi những người khác sẽ không. Xem câu hỏi StackOverflow "Remove trailing “=” when base64 encoding"

Đối tượng TIdDecoderMime xác thực đầu vào bằng cách đảm bảo rằng nó là bội số của 4 - nó sẽ là nếu ký tự đệm được bao gồm trong đầu vào.