我如何从 Headers.ContentDisposition 解码文件名

How can i decode filename from Headers.ContentDisposition

我通过POST请求下载文件。编码后的文件名出现在响应 headers 中。我该如何解码?

我需要“ЕΓРН__26-29-040306-520__XZP.XML”(在 Fiddler 中是正确的),但在我的程序中我得到“ÐÐÐ Ð __26-29-040306-520__XZP.XML".

以正确的编码响应 Body。

这是截图 - https://i.stack.imgur.com/CnL6M.png

ASP.NET、MVC、框架 4.6

.Net 确实完全支持 Unicode,所有字符串都在内部存储为 UTF-16。您的 IDE 可能设置为无法显示字符串的编码,但它仍正确存储在内存中。问题是 HTTP 规范仅支持 headers 中的 ASCII,但不能保证其他编码有效,尽管它经常有效。

Link 规范:https://www.rfc-editor.org/rfc/rfc2183 声明 Content-Disposition 中的文件名仅支持 ASCII。

您可以在此处阅读更多相关信息:What character encoding should I use for a HTTP header?

如果可能,您应该在上传之前在客户端将文件名转换为 base64,但如果是从浏览器上传的,那实际上是不可能的。

您可以尝试的一件事是:

var textBytes = System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(response.Content.Headers.ContentDisposition.FileName);
var converted = System.Text.Encoding.UTF8.GetString(textBytes);