.Net HttpResponseMessage csv excel可以打开的具有特殊字符的文件



我的应用程序是一个.net WebAPI(C#,没有MVC(,除其他外,它还必须为一些csv文件提供服务器,这些文件的内容也可以包括非标准字符(即希腊字母(。

我试图在SO上找到一个解决方案,但大多数答案都涉及使用基本mvc控制器类的File方法(我无法访问该方法(。

我当前的代码如下所示(我甚至删除了File.ReadAllText部分,以检查它是否可以只返回一个简单的Hello World文本(。

private HttpResponseMessage GetFile(string fileName)
{
var response = new HttpResponseMessage();
try
{
response.Content = new StringContent("Γειά σου Κόσμε");
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = fileName + ".csv" };
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv");
}
catch (Exception) { response.Content = new StringContent("File does not exist"); }
return response;
}

我也试过使用response.Content.Headers.ContentEncoding.Add(Encoding.UTF8.BodyName);

一些奇怪的互动:

如果我下载文件并用Excel打开它,它只会读起来胡言乱语,如果我用记事本++打开它,文本读起来很好。它还指出编码是utf8,如果我将其更改为utf-8 BOM并保存文件,excel可以读取它。

如果我只是简单地将文件从服务器移动到我的计算机上,excel读取它没有问题

我好像忽略了一个问题。这是关于MVC项目的,但答案仍然适用。

我只需要把它改成:

var content = Encoding.UTF8.GetBytes(File.ReadAllText(pathName));
response.Content = new ByteArrayContent(Encoding.UTF8.GetPreamble().Concat(content).ToArray());

我似乎错过了应该出现在utf8com文件开头的字符。

最新更新