您遇到的问题是您使用的是DecodeString
。该函数在Delphi 7中将解码的二进制数据视为ANSI编码。问题是你的文本是UTF-8编码的。
要继续使用EncdDecd
单位,您有几个选项。您可以切换到DecodeStream
。例如,该代码将产生一个UTF-8编码的文本文件格式的数据:
{$APPTYPE CONSOLE}
uses
Classes,
EncdDecd;
const
Data = 'PD94bWwgdmVyc2lvbj0iMS4wIj8+DQo8c3RyaW5nPtiq2LPYqjwvc3RyaW5nPg==';
var
Input: TStringStream;
Output: TFileStream;
begin
Input := TStringStream.Create(Data);
try
Output := TFileStream.Create('C:\desktop\out.txt', fmCreate);
try
DecodeStream(Input, Output);
finally
Output.Free;
end;
finally
Input.Free;
end;
end.
或者你可以继续DecodeString
,但随后立即解码UTF-8文本到WideString
。就像这样:
{$APPTYPE CONSOLE}
uses
Classes,
EncdDecd;
const
Data = 'PD94bWwgdmVyc2lvbj0iMS4wIj8+DQo8c3RyaW5nPtiq2LPYqjwvc3RyaW5nPg==';
var
Utf8: AnsiString;
wstr: WideString;
begin
Utf8 := DecodeString(Data);
wstr := UTF8Decode(Utf8);
end.
如果该文件的内容可以在您的应用程序的普遍ANSI现场表示,那么你可以转换WideString
为纯AnsiString
。
var
wstr: WideString;
str: string; // alias to AnsiString
....
wstr := ... // as before
str := wstr;
但是,我真的不认为使用ANSI编码的文本会导致非常有成效的编程生活。我鼓励你接受Unicode解决方案。
根据解码数据的内容判断是XML。通常交给XML解析器。大多数XML解析器将接受UTF-8编码数据,因此您很可能可以使用DecodeStream
base64解码到内存流,然后将该流传递给您的XML解析器。这样您就不需要将UTF-8解码为文本,并且可以让XML解析器处理这方面的问题。
相关问题:[如何使用EncdDec库编码字符串](http://stackoverflow.com/questions/21883152/how-to-encode-strings-with-encddec-library) – fantaghirocco