代码之家  ›  专栏  ›  技术社区  ›  eKek0

如何对下载文件名进行编码?

  •  17
  • eKek0  · 技术社区  · 15 年前

    当文件名为“alguna marcas que nos acompa_an”时,ASP.NET MVC将 System.FormatException 当我试图下载那个文件时。但如果文件名是“AsistenedeGerenciacomercial”,则不是。

    我想这是因为 UTF-8 编码,但我不知道如何编码这个字符串。

    如果我是对的,如何将字符串编码 UTF-8 编码?如果我不对,我的问题是什么?

    7 回复  |  直到 7 年前
        1
  •  25
  •   Hakan Fıstık    7 年前

    我把文件名编码成这样以便下载,

    HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename= " + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
    
        2
  •  5
  •   eKek0    15 年前

    基于zz coder答案,由于我使用的是fileresult,所以我决定将文件名编码为:

    HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)
    
        3
  •  1
  •   Julian Reschke    15 年前

    这个问题已经知道很多年了。据我所知,目前没有可互操作的方法来实现这一点,所以答案是只支持一组浏览器,或者做用户代理嗅探。

    测试用例和链接位于: http://greenbytes.de/tech/tc2231/

        4
  •  0
  •   John Fisher    15 年前

    我最近对此做了一些努力,因为有许多潜在的语言被用于文件名(中文很好用来测试)。以下是一些接近我最终的结果(不包括其他实现细节):

    HttpUtility.UrlEncode("é", System.Text.Encoding.GetEncoding("ISO-8859-1"))
    
        5
  •  0
  •   TJB    13 年前

    另外:httputility被认为是有害的:
    http://serialseb.blogspot.com/2008/03/httputilityurlencode-considered-harmful.html

    我只想把“”换成“u”,然后叫它一天=)

        6
  •  0
  •   ashkan    9 年前

    注意,使用UTF编码 替换 文件名中的空格转换为“+”,使用以下任一代码都会产生相同的结果:

    HttpUtility.UrlEncode("é", System.Text.Encoding.GetEncoding("ISO-8859-1"))
    HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)
    
        7
  •  0
  •   ashkan    9 年前

    而不是使用 断续性 它使用以下代码将文件名中的空格替换为“+”,从而解决问题:

    string attachment = String.Format("attachment; filename={0}",Server.UrlPathEncode(file.Name.TrimEnd()));
    Response.AddHeader("Content-Disposition", attachment);
    

    请注意,如果您从数据集中检索文件名,可能需要先修剪名称! 您还必须提前添加以下代码行:

    Response.Charset = "utf-8";
    Response.HeaderEncoding = UnicodeEncoding.UTF8;
    Response.ContentEncoding = UnicodeEncoding.UTF8;