【发布时间】:2010-04-15 11:19:46
【问题描述】:
我正在尝试从我的应用程序中的 XML 文档中解码 base64 编码的 EMF 图像并将其呈现在屏幕上,但是它似乎从未出现过。
如果我将 XML 文档中的数据复制/粘贴到 Notepad++ 中并使用Base64 Decode 选项并将文件另存为.emf,它会在 mspaint 中正常打开。所以我认为问题在于我如何解码它。
我尝试了这些文章中描述的以下解码方法:
How to encode / decode Base 64 string
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;
为什么上述方法不起作用,但将原始数据复制到 Notepad++ 并解码并保存为.emf 有效?
【问题讨论】:
-
你能给我们看一些代码吗?你用的是什么版本的德尔福?你用的是什么版本的 Indy?
-
@Fox:我已经标记了问题 Delphi 2010,并且它也在问题标题中.... indy 的版本将是我想象的 Delphi 2010 附带的任何版本。
-
您是否在解码前检查了 AValue 的值以确保它包含整个 base64 编码值?
-
@Marcus 从我在手表上看到的,是的,看起来不错
-
@Marcus,确实,我一定看过 Delphi 2010 的标签和标题。
标签: delphi xml-serialization delphi-2010 base64