C#无法将欧元符号打印到文件中(使用Excel打开时)

我有一个get方法到一个web api控制器的问题。 此方法返回一个HttpResponseMessage对象,该对象具有包含欧元符号的csv文件的HttpContent。 当该方法返回文件时,欧元符号不被打印。 该方法的代码如下:

string export = ... //string with fields separed by ';' and with euro symbol HttpResponseMessage response = new HttpResponseMessage(); UTF8Encoding encoding = new UTF8Encoding(); Byte[] buffer = encoding.GetBytes(export); response.Content = new ByteArrayContent(buffer); response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv"); response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "Export.csv" }; response.Content.Headers.ContentLength = export.Length; response.Content.Headers.Expires = new DateTimeOffset(DateTime.Now.AddDays(1)); return response; 

当我打开文件时,欧元符号显示不正确。 你能给我一个答案吗?

非常感谢。

如前所述,这不适用于Excel,因为欧元符号没有正确显示(尽pipe它在任何纯文本编辑器中)。

 [HttpPost("csv")] public HttpResponseMessage GetCvsReport() { var response = new HttpResponseMessage(HttpStatusCode.OK); var content = "12€;3;test"; var encoding = Encoding.UTF8; response.Content = new StringContent(content, encoding , "text/csv"); response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = yourfile.csv" }; return response; } 

我发现以下解决scheme似乎正常工作。

使用Windows-1252编码

看来,通过使用Windows-1252编码,Excel能够正确解释€符号。

 [HttpPost("csv")] public HttpResponseMessage GetCvsReport() { var response = new HttpResponseMessage(HttpStatusCode.OK); var content = "12€;3;test"; var encoding = Encoding.GetEncoding("Windows-1252"); response.Content = new StringContent(content, encoding , "text/csv"); ... } 

加上BOM(字节顺序标记)

另一个解决scheme是像这样附加正确的BOM:

 [HttpPost("csv")] public HttpResponseMessage GetCvsReport() { var response = new HttpResponseMessage(HttpStatusCode.OK); var content = "12€;3;test"; var encoding = Encoding.UTF8; content = encoding.GetString(new byte[] { 0xEF, 0xBB, 0xBF }) + content; response.Content = new StringContent(content, encoding , "text/csv"); response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = yourfile.csv" }; return response; } 

采取你最喜欢的解决scheme。