在 Tcl 8.5.9 中检查使用 URLEncoding 的
file:
URL 指定的文件是否存在的最简单方法是什么?
::http::geturl
表示不支持 file
URL。
file exists
需要 URLDecoding。似乎没有用于 URLDecoding 的内置过程。我错过了吗?
还有其他内置方法可以做到这一点吗?新版本的 Tcl 对此提供更多支持吗?
如果没有内置方法,是否有推荐的库?是直接处理
file:
URL,还是 URLDecoding?
在我的项目中,我倾向于使用 URI/URL 处理器 (uri::split) 和 URL 解码器 (urlDecode) 的组合进行后处理:
% package req uri
1.2.7
% set parsedURL [::uri::split file:///path/to/a%20file]
path /path/to/a%20file scheme file
来源如下:
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
和朋友。