如何将URL编码中的%C3%B8转换为ø?C#实现失败求助
解决URL编码文件名转换问题
嘿,我来帮你搞定这个URL编码文件名的转换问题!你的核心需求是把像%C3%B8这类URL编码片段转换成对应的Unicode字符ø,先帮你理清问题,再给你靠谱的解决方案。
为什么你的原代码没效果?
你之前的代码只是做了字符串和UTF8字节的来回转换,完全没处理URL编码的逻辑——相当于把原字符串拆成字节再拼回去,%C3%B8自然还是原样,根本没法转换成ø。
正确的C#解决方案
.NET内置了专门处理URL编码的工具类,直接用它们就能轻松完成解码:
通用实现代码
不管是处理单独的编码字符串,还是从ContentDisposition里获取的文件名,都可以用WebUtility.UrlDecode(适用于.NET Core/.NET 5+)或者HttpUtility.UrlDecode(适用于.NET Framework):
using System; using System.Net; // 记得引入这个命名空间 // 处理需求1:转换"test%C3%B8%C3%B8%C3%B8.txt" string encodedName1 = "test%C3%B8%C3%B8%C3%B8.txt"; string decodedName1 = WebUtility.UrlDecode(encodedName1); Console.WriteLine(decodedName1); // 输出:testøøø.txt // 处理需求2:转换"testdoc%C3%B8%C3%B8%C3%B8.txt" string encodedName2 = "testdoc%C3%B8%C3%B8%C3%B8.txt"; string decodedName2 = WebUtility.UrlDecode(encodedName2); Console.WriteLine(decodedName2); // 输出:testdocøøø.txt
针对你现有代码的修改
如果你是从响应头里获取文件名,直接对拿到的字符串做URL解码就行,不需要多余的字节转换操作:
var cont = response.Content.Headers.ContentDisposition?.FileName; if (!string.IsNullOrEmpty(cont)) { var decodedFileName = WebUtility.UrlDecode(cont); // 这里就得到了正确解码后的文件名 }
内容的提问来源于stack exchange,提问作者jubibanna
相关产品推荐
相关产品推荐

