.NET中如何实现m%2Fs与m/s的双向编解码转换
.NET中"m/s"与"m%2Fs"双向编解码实现方案
问题原因
m%2Fs是标准URL百分号编码格式,%2F对应正斜杠/的转义结果。你之前尝试的方法完全不匹配当前场景,自然无法生效:
HttpUtility.HtmlDecode/HttpUtility.HtmlEncode用于处理HTML实体转义(例如 转空格、<转<),不识别URL百分号转义规则Convert.ToBase64String/Convert.FromBase64String用于Base64格式编解码,和百分号编码的逻辑完全无关,无法处理这类数据
转换实现
解码:将URL编码格式转回原始值(m%2Fs → m/s)
以下三种方法都可以正确得到结果,根据项目环境选择即可:
// 方法1:HttpUtility,需引用System.Web命名空间,全版本.NET支持 using System.Web; string rawValue = HttpUtility.UrlDecode("m%2Fs"); // 输出:m/s // 方法2:WebUtility,需引用System.Net命名空间,无需额外依赖System.Web,全版本支持 using System.Net; string rawValue = WebUtility.UrlDecode("m%2Fs"); // 输出:m/s // 方法3:Uri静态方法,需引用System命名空间,无额外依赖,全版本支持 using System; string rawValue = Uri.UnescapeDataString("m%2Fs"); // 输出:m/s
编码:将原始值转为URL编码格式(m/s → m%2Fs)
注意:URL百分号编码本身不区分十六进制字符大小写,
m%2fs和m%2Fs语义完全等价。如果需要严格匹配你获取到的m%2Fs(F为大写)格式,优先使用Uri.EscapeDataString方法。
// 方法1:HttpUtility,输出结果为m%2fs(f小写) using System.Web; string encodedValue = HttpUtility.UrlEncode("m/s"); // 方法2:WebUtility,输出结果为m%2fs(f小写) using System.Net; string encodedValue = WebUtility.UrlEncode("m/s"); // 方法3:Uri静态方法,输出结果为m%2Fs(F大写,和你拿到的格式完全匹配) using System; string encodedValue = Uri.EscapeDataString("m/s");
选型建议
- 传统.NET Framework项目可任意选择上述方法
- .NET Core/.NET 5+ 跨平台环境优先选择
WebUtility或Uri的静态方法,不需要额外引入System.Web依赖,部署更轻量
内容的提问来源于stack exchange,提问作者tangel
相关产品推荐
相关产品推荐

