Jam*_*mes 3 delphi base64 xml-serialization delphi-2010
我试图从我的应用程序中的XML文档解码base64编码的EMF图像并在屏幕上呈现它,但是,它似乎永远不会出现.
如果我将XML文档中的数据复制/粘贴到Notepad ++中并使用该Base64 Decode选项并保存文件,因为.emf它在mspaint中打开正常.所以我认为问题是我如何解码它.
我尝试了以下这些文章中描述的解码方法:
如何编码/解码Base 64字符串
http://www.swissdelphicenter.ch/torry/showcode.php?id=1223
我也试过这TIdDecoderMIME堂课无济于事.
有谁知道从XML解码base64编码字符串的最可靠方法?
例
procedure TXmlSerializer.SaveImageFromString(const AValue: string);
var
StrStream: TStringStream;
Decoder: TIdDecoderMIME;
begin
// AValue is base64 encoded string from XML doc
Decoder := TIdDecoderMIME.Create(nil);
try
StrStream := TStringStream.Create(Decoder.DecodeString(AValue));
try
StrStream.SaveToFile('MyPath\Image.emf');
finally
StrStream.Free;
end;
finally
Decoder.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
为什么以上不起作用,而是将原始数据复制到Notepad ++并解码和保存为.emf工作?
您正在使用字符串来存储二进制数据; Delphi 2010的unicode-ness可能会在这里"责怪".
尝试使用base64解码器,它支持解码到流,并直接解码到TFileStream; 我使用JclMime(Jedi的JCL的一部分),但是如果没有Indy MIME方法可以在流而不是字符串上工作,我会感到惊讶.
由于JclMime仅支持流到流解码,因此在从XML有效负载解码base64数据时使用以下包装器:
procedure MimeDecode(const inputString: string; const outputStream: Tstream);
var
ss: TStringStream;
begin
ss := TStringStream.Create(inputString);
try
JclMime.MimeDecodeStream(ss, outputStream);
finally
ss.free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7937 次 |
| 最近记录: |