c# - 为 Safari 下载的文件名无法打印瑞典语字符
问题描述
我的 SPA 中有一个函数,它向 Microsoft Azure 中的服务端点发送请求,请求文件(在本例中为 PDF)。下载此文件会导致文件上的名称,如果我错了,请纠正我,为 MacOS 上的 Safari 编码。
我了解到 Safari 或 MacOS 使用 UTF8,在 windowsmachine 上用 .net 框架编写的字符串将是 UTF16,但出于测试目的,我将文件名直接写入ContentDispositionHeaderValue
下面的代码示例:
var result = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ByteArrayContent(data)
};
result.Content.Headers.ContentType = new MediaTypeHeaderValue(mediaType);
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "Brännoljegatan 4.pdf",
CreationDate = DateTimeOffset.UtcNow
};
现在使用我的 SPA,请求此文件将输出如下:
Chrome: "Brännoljegatan 4.pdf"
Safari: =?utf-8?B?QnLDpG5ub2xqZWdhdGFuIDQucGRm?=
string fileName = Uri.EscapeDataString("Brännoljegatan 4.pdf");
result.Content.Headers.ContentType = new MediaTypeHeaderValue(mediaType);
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = fileName,
CreationDate = DateTimeOffset.UtcNow
};
上面的代码会导致:
Chrome: "Brännoljegatan 4.pdf"
Safari: Br%C3%A4nnoljegatan%204.pdf"
这是我真的不知道如何继续让文件名对 Safari 正确的地方。我们的浏览器目标是:
- 基于铬(Chrome、MS Edge)
- 互联网浏览器 11
- 苹果浏览器
可悲的是,Safari 是迄今为止唯一的害群之马。
我希望将下载的文件命名为“Brännoljegatan 4.pdf”供 Safari 使用,当然还有剩余的瑞典语字符(å Å、ä Ä、ö Ö)
您有什么建议吗?
解决方案
在 canton7 和周末休息的帮助下,我能够为我的代码解决这个问题。我没有使用,
而是使用.
我的是使用 .NET Framework 4.7。Response.AddHeaders()
Headers.Add()
result
HttpResponseMessage
string fileName = "Brännoljegatan 4.pdf";
string mediaType = "application/pdf";
string contentDisposition;
contentDisposition = "attachment; filename=\"" + fileName + "\"; filename*=UTF-8''" + Uri.EscapeDataString(fileName);
result.Content.Headers.Add("Content-Disposition", contentDisposition);
result.Content.Headers.ContentType = new MediaTypeHeaderValue(mediaType);
推荐阅读
- c# - Visual Studio 16.6.1 不显示方法和操作的颜色
- c# - 需要一个条件来分隔两种 json 类型
- json - 我看不到我在 arm-template-parameters-definition.json 中创建的触发器
- ios - 如果手机锁定,则禁用推送通知声音,否则启用
- java - 抽象类和具体子类
- php - 如何在没有 javascript 的情况下将值从 php 传递到简单的 html?
- sql - 第一个星期一的sql日期函数
- json - 使用 Spark Scala 读取 REST API JSON 响应
- javascript - 尝试使用 React 在段落中制作锚点
- javascript - 在 Downshift Reactjs 中保存默认值