使用PowerShell [uri]类型加速器时AbsoluteUri出现编码异常问题
PowerShell中[uri]类型加速器转换URL时的编码问题
问题场景
- 本地文件
$URLsFile包含以下URL内容:
http://WIND451325/Dev/Application.aspx__%__dev.com http://WIND451326/Dev/Application.aspx__%__dev.com
- 执行PowerShell命令将文件内容转换为URI数组:
[uri[]]$ArrayURLs = Get-Content -Path $URLsFile
- 遍历输出数组中每个元素的
AbsoluteUri属性时,发现原URL里的__%__被自动转换为__%25__:
foreach ($item in $ArrayURLs) { $item.AbsoluteUri } # 实际输出 http://WIND451325/Dev/Application.aspx__%25__dev.com http://WIND451326/Dev/Application.aspx__%25__dev.com
原因解析
这是.NET框架中System.Uri类的默认行为:
%是URL的保留字符,专门用于标识编码后的特殊字符(比如%20对应空格)。当System.Uri解析到未编码的%时,会自动将其编码为%25(%的标准URL编码值)。- PowerShell的
[uri]类型加速器本质就是调用.NET的System.Uri类完成类型转换,因此会触发这个自动编码逻辑。
处理方案
如果需要保留原URL中的%不被编码,可参考以下两种方式:
- 先读取原始字符串,避免直接转为
[uri]类型,后续按需手动处理:
$rawURLs = Get-Content -Path $URLsFile
- 对已编码的Uri结果进行手动解码:
[uri[]]$ArrayURLs = Get-Content -Path $URLsFile foreach ($item in $ArrayURLs) { [Uri]::UnescapeDataString($item.AbsoluteUri) }
内容的提问来源于stack exchange,提问作者edwio
相关产品推荐
相关产品推荐

