【问题标题】:Asp.Net MVC 5 FileResult always download file with ANSI encodingAsp.Net MVC 5 FileResult 总是使用 ANSI 编码下载文件
【发布时间】:2019-11-27 06:12:33
【问题描述】:

我有这部分代码

Response.Charset = _encodingcode;
Response.AddHeader("Content-Encoding", _encodingcode);
Response.HeaderEncoding = Encoding.GetEncoding(_encodingcode);
Response.ContentEncoding = Encoding.GetEncoding(_encodingcode);
Response.ContentType = mimeType;                     

return File(_filedata, mimeType, $"{id}{_extension}");

但在下载文件时,记事本的编码总是ANSI

【问题讨论】:

标签: c# encoding asp.net-mvc-5 fileresult


【解决方案1】:

记事本只接收 _filedata 字节,这些字节作为文件保存到磁盘,名称在第三个参数中指定,但既不接收 mimeType 也不接收响应头或正文的任何​​元素,这就是为什么指定编码无效。

您可以通过在字节流的开头添加字节顺序标记 (BOM) 来向记事本提示一些编码:

  • 对于 UTF-8 - 0xEF,0xBB,0xBF
  • 对于 UTF-16/32 - 0xFF、0xFE

除此之外,没有办法告诉记事本应该使用什么编码。

【讨论】:

    【解决方案2】:

    默认情况下,如果您在编码中提供了不正确的文本,则每个编码都是 ANSI,它会成为 ANSI。 改变用途的正确方法

    Context.Response.Charset = Encoding.UTF8.WebName;
    

    如果你想要 utf8 这样做

     Encoding encoding = Encoding.UTF8;
         StreamWriter writer = new StreamWriter("Encoding.html", false, encoding);
    
         writer.WriteLine("<html><head>");
    
         // Write charset attribute to the html file.
         // The value of charset is returned by the WebName property.
         writer.WriteLine("<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=" +
                               encoding.WebName +"\">");
    
             writer.WriteLine("</head><body>");
         writer.WriteLine("<p>" + HttpUtility.HtmlEncode(encoding.EncodingName) + "</p>");
         writer.WriteLine("</body></html>");
         writer.Flush();
         writer.Close();
    

    【讨论】:

      猜你喜欢
      • 2011-04-05
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      相关资源
      最近更新 更多