You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 3.5 WPF下响应头UTF-8编解码及Content-Disposition文件名提取问题

关于.NET 3.5 WPF中Content-Disposition文件名编码及解码问题解答

问题一:Content-Disposition中UTF-8编码的来源

该编码格式遵循HTTP标准RFC 5987定义的filename*扩展参数规则,推出的核心目的是解决传统filename字段仅支持ASCII字符、无法兼容多语言非ASCII文件名的痛点。
filename*的标准格式为 filename*=<字符集>''<百分号编码后的文件名>,你遇到的UTF-8''前缀就是明确标识后续百分号编码内容采用UTF-8字符集编码,是当前Web服务器返回非ASCII附件文件名的通用实现,一般会同时返回带*的扩展字段和传统filename字段做向下兼容。

问题二:.NET 3.5环境下的解码实现方案

解码失败通常是因为未明确指定UTF-8编码进行解码,或使用的API不符合规范要求,可按照以下步骤处理:

第一步:提取待解码内容

优先提取filename*=后面的内容,跳过前缀UTF-8''即可得到待解码的百分号编码串,该字段明确指定了编码规则,兼容性优于传统的filename字段。

第二步:执行解码

提供两种.NET 3.5环境下可用的解码方案:

方案1:使用System.Web内置API

需要先为项目添加System.Web程序集引用(WPF项目默认未引入,右键项目→添加引用→勾选System.Web即可):

using System.Web;
using System.Text;

// 截取得到的待解码串
string encodedFileName = "SC-FR-06-%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA%20%D8%AE%D8%B1%DB%8C%D8%AF.pdf";
// 明确指定UTF-8编码解码
string decodedFileName = HttpUtility.UrlDecode(encodedFileName, Encoding.UTF8);

方案2:自定义解码逻辑(无需引入System.Web)

如果不想依赖System.Web程序集,可以自己实现百分号解码逻辑:

using System.Collections.Generic;
using System.Text;

public static string PercentDecode(string encodedStr, Encoding encoding)
{
    if (string.IsNullOrEmpty(encodedStr))
        return encodedStr;
    
    List<byte> byteBuffer = new List<byte>();
    for (int i = 0; i < encodedStr.Length; i++)
    {
        if (encodedStr[i] == '%' && i + 2 < encodedStr.Length)
        {
            byte hexByte = Convert.ToByte(encodedStr.Substring(i + 1, 2), 16);
            byteBuffer.Add(hexByte);
            i += 2;
        }
        else
        {
            byteBuffer.AddRange(encoding.GetBytes(new[] { encodedStr[i] }));
        }
    }
    return encoding.GetString(byteBuffer.ToArray());
}

// 调用示例
string encodedFileName = "SC-FR-06-%D8%AF%D8%B1%D8%AE%D9%88%D8%A7%D8%B3%D8%AA%20%D8%AE%D8%B1%DB%8C%D8%AF.pdf";
string decodedFileName = PercentDecode(encodedFileName, Encoding.UTF8);

解码后即可得到正常的波斯语文件名 SC-FR-06-درخواست خرید.pdf,可直接用于本地文件存储。


内容的提问来源于stack exchange,提问作者vahid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:42:04