% getは%25としてエンコードされているため、文字列からそれらを選択して、代表的な文字に戻すことができるはずです。
これを行うには、Pos/PosEx を使用して str で%を検索し、その後の 2 桁を取り出す必要があります (常に 2 だと思います)。
これは私の頭の中から外れているので、コンパイルされない場合やパラメーターの順序が間違っている場合などはお詫びします。一般的なアイデアを得るには十分なはずです。
function GetNextHex(InStr:String;var Position:Integer):String;
var
NextHex: Integer;
begin
NextHex := PosEx('%', InStr, Position);
if (NextHex > -1) then
Result := Copy(InStr, NextHex, 3)
else
Result := '';
Position := NextHex;
end;
16 進数を chr に変更するには、%を$に交換し、好みに応じてStrToInt
使用できるものを使用しますChar
。Chr
function PercentHexToInt(Hex: String):Integer;
var
str : string;
begin
if (Hex[1] <> '%') then Result := 0
else
begin
// Result := strtoint(StrToHex('$' + Copy(Hex, 1,2)));
str :=StringReplace(HEx,'%','',[rfReplaceAll,rfIgnoreCase]);
str:=trim(str);
Result := StrToInt(('$' +str));
end;
end;
これらを使用すると、文字列をスキャンして16進値を置き換えることができるはずです
function ReplaceHexValues(Str: String):String;
var
Position:Integer;
HexValue:String;
IntValue:Integer;
CharValue:String;
begin
Position := 0;
while(Position > -1)
begin
HexValue := GetNextHex(Str, Position);
IntValue := PercentHexToInt(HexValue);
CharValue := Char(IntValue);
if (CharValue = #0) then break;
//Note that Position Currently contains the the start of the hex value in the string
Delete(Str, Position, 3);
Insert(CharValue,Str,Position);
end;
Result:=Str;
end;