csharp WPF 显示带有 URL 转义字符的图片
csharp WPF 显示带有 URL 转义字符的图片
问题描述
如果 C# 使用代码更改 WPF 中 <Image>
的图片,使用自带的 BitmapImage
类,会发现带有百分号转移字符的图片显示不出来。
例如:
1 |
|
就会报错:
1 |
|
注意文件名末尾,%20
被替换成了空格。说明 Uri
自动解码了 %20
转义字符。但是,BitmapImage
不接受其它的构造函数,只能使用 Uri
构造函数,也就无法避免这种情况。
对于此情况,国内大部分 AI 工具的回答都翻车了。它们给出的回答以及实测问题如下表。
AI 给出的方案 | 问题 |
---|---|
用 WebUtility.UrlDecode 解码,再构建 Uri |
适得其反,反而“显示地”声明需要把 %20 转义符还原 |
用 Path.Combine 拼接路径 |
仍然会触发转义 |
捕获可能出现的 FileNotFoundException 异常 | 没有意义 |
使用 @ 符号创建逐字字符串 | 问题不出现在路径本身上 |
使用 Uri(fullPath, UriKind.Absolute) |
UriKind.Absolute 仍然会触发转义 |
使用相对路径代替绝对路径 | 仍然会触发转义 |
解决方案
用文件流,绕开 Uri
自动解码的机制,直接加载图片。
1 |
|
csharp WPF 显示带有 URL 转义字符的图片
https://taylorandtony.github.io/2025/03/17/csharp-WPF-显示带有-URL-转义字符的图片/