检查文件是否存在:Tcl 8.5.9 中使用 URLEncoding 的 URL

问题描述 投票:0回答:1

在 Tcl 8.5.9 中检查使用 URLEncoding 的

file:
URL 指定的文件是否存在的最简单方法是什么?

::http::geturl
表示不支持
file
URL。

file exists
需要 URLDecoding。似乎没有用于 URLDecoding 的内置过程。我错过了吗?

还有其他内置方法可以做到这一点吗?新版本的 Tcl 对此提供更多支持吗?

如果没有内置方法,是否有推荐的库?是直接处理

file:
URL,还是 URLDecoding?

tcl urlencode urldecode
1个回答
0
投票

在我的项目中,我倾向于使用 URI/URL 处理器 (uri::split) 和 URL 解码器 (urlDecode) 的组合进行后处理:

第1步:URL处理

% package req uri
1.2.7
% set parsedURL [::uri::split file:///path/to/a%20file]
path /path/to/a%20file scheme file

第 2 步:URL(百分比)解码

来源如下:

proc urlDecode {str} {
    set specialMap {"[" "%5B" "]" "%5D"}
    set seqRE {%([0-9a-fA-F]{2})}
    set replacement {[format "%c" [scan "\1" "%2x"]]}
    set modStr [regsub -all $seqRE [string map $specialMap $str] $replacement]
    return [encoding convertfrom utf-8 [subst -nobackslash -novariable $modStr]]
}

然后:

% set fp [urlDecode [dict get $parsedURL path]]
/path/to/a file
% file exists $fp
% 0

根据目标的便携性和稳健性,您可能需要使用

file normalize
和朋友。

© www.soinside.com 2019 - 2024. All rights reserved.