Недавно я перешел с D2007 на 10.3.3, и у меня возникла проблема ниже.
У меня есть TClientDataSet, который записывает данные в зашифрованном виде в формат .cds, сохраняя их в TStringField и используя метод .saveToFile . Проблема в том, что строка не соответствует записи в таблицу CDS.
Вот моя функция шифрования:
function encrypt(const ent: string): string;
var m, i, k : integer;
r, s : string;
begin
m := 3;
r := '';
for I := 1 to Length(ent) do
begin
k := ord(ent[i]);
s := chr(k+m);
r := r + s;
inc(m);
end;
result := r;
end;
А вот моя функция дешифрования:
function decrypt(const ent: string): string;
var m, i,j,K : integer;
r, s : string;
begin
m := 3;
r := '';
s := ent;
for I := 1 to length(s) do
begin
if ord(s[i]) < 68 then j := 1 else
j := -1;
k := ord(s[i]);
r := r + chr(k-m);
inc(m);
end;
result := r;
end;
Теперь я хочу вызвать эту функцию со строкой 'engajamento1234'. Вот как часы показывают зашифрованную строку:
А вот как строка фактически вставляется в столбец TStringField таблицы:
Поскольку строка в итоге неправильно вставляется в клиентский набор данных, когда я вызываю функцию дешифрования со строкой 'hrlgqivoy? |? ACE', я получаю неправильную исходная строка как 'engajamen3o1234' ...
Похоже, эта проблема связана с поддержкой UTF8 в новой версии Delphi, которой в старой версии не было.
Что мне нужно сделать для правильной записи строки в набор данных клиента и файл .cds, чтобы я вернул правильную расшифрованную строку?