Ali*_*ter 2 delphi url filenames encode
作为Delphi应用程序的一部分,我想将URL转换为文件名.我正在做的是缓存QR码.QR码代表一个URL,我想用一个代表该URL的文件名存储QR码图像.例如http://myurl.com/bla可能会成为http ___ myrul.com_bla.png - 这里我刚刚用下划线替换了任何非字母数字字符(并添加了.png扩展名).
我想知道是否有一种简单/标准的方法(最好是在Delphi中)或者我应该编写上面提到的算法.
尝试编码URL(返回的字符串将始终是有效的文件名),然后添加扩展.该过程也是可逆的,因此您可以从文件名中获取原始URL.
{$APPTYPE CONSOLE}
uses
SysUtils;
function URLEncode(const AUrl: string): string;
var
Index: Integer;
begin
Result := '';
for Index := 1 to Length(AUrl) do
begin
case AUrl[Index] of
'A'..'Z', 'a'..'z', '0'..'9', '-', '_', '.': Result := Result + AUrl[Index];
' ' : Result := Result + '%20';
else
Result := Result + '%' + IntToHex(Ord(AUrl[Index]), 2);
end;
end;
end;
function UrlToFileName(const AUrl,Ext : string) : TFileName;
begin
Result := Format('%s.%s',[URLEncode(AUrl),Ext]);
end;
begin
try
Writeln(UrlToFileName('http://stackoverflow.com/questions/5784218/convert-a-url-to-a-valid-win32-filename-in-delphi','png'));
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
这将回来
http%3A%2F%2Fstackoverflow.com%2Fquestions%2F5784218%2Fconvert-a-url-to-a-valid-
win32-filename-in-delphi.png
Run Code Online (Sandbox Code Playgroud)
有关其他信息,请阅读Naming Files, Paths, and Namespaces文章.