Delphi中对URL进行编码和解码
Delphi中处理URL时,有时会遇到编码问题,比如文件名如果含有空格,则空格会被%20代替。如果不进行转换,则会出现问题。在网上找到一段转换代码(Delphi没有自带的?),可以顺利进行
//delphi 最快速编码 URLDecode URLEncode function URLDecode(const S: string): string; var Idx: Integer; // loops thru chars in string Hex: string; // string of hex characters Code: Integer; // hex character code (-1 on error) begin // Intialise result and string index Result := ''; Idx := 1; // Loop thru string decoding each character while Idx <= Length(S) do begin case S[Idx] of '%': begin // % should be followed by two hex digits - exception otherwise if Idx <= Length(S) - 2 then begin // there are sufficient digits - try to decode hex digits Hex := S[Idx+1] + S[Idx+2]; Code := SysUtils.StrToIntDef('$' + Hex, -1); Inc(Idx, 2); end else // insufficient digits - error Code := -1; // check for error and raise exception if found if Code = -1 then raise SysUtils.EConvertError.Create( 'Invalid hex digit in URL' ); // decoded OK - add character to result Result := Result + Chr(Code); end; '+': // + is decoded as a space Result := Result + ' ' else // All other characters pass thru unchanged Result := Result + S[Idx]; end; Inc(Idx); end; end; function URLEncode(const S: string; const InQueryString: Boolean): string; var Idx: Integer; // loops thru characters in string begin Result := ''; for Idx := 1 to Length(S) do begin case S[Idx] of 'A'..'Z', 'a'..'z', '0'..'9', '-', '_', '.': Result := Result + S[Idx]; ' ': if InQueryString then Result := Result + '+' else Result := Result + '%20'; else Result := Result + '%' + SysUtils.IntToHex(Ord(S[Idx]), 2); end; end; end;