Проблема заключается в том, что вы используете 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, поэтому вы, вероятно, можете дешифровать base64 в потоке памяти, используя DecodeStream
, а затем передать этот поток вашему парсеру XML. Таким образом, вам не нужно расшифровывать UTF-8 в текст и позволить парсеру XML иметь дело с этим аспектом.
Связанный вопрос: [Как кодировать строки с библиотекой EncdDec] (http://stackoverflow.com/questions/21883152/how-to-encode-strings-with-encddec-library) – fantaghirocco