C#无法将欧元符号打印到文件中(使用Excel打开时)
本文关键字:使用 Excel 文件 打印 符号 | 更新日期: 2023-09-27 18:28:22
我在web api控制器中使用get方法时遇到问题。此方法返回一个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中不起作用,因为€符号没有正确显示(尽管它在任何纯文本编辑器中)。
[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;
}
我发现以下解决方案似乎运行正常。
使用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(字节顺序标记)
另一个有效的解决方案是像这样附加正确的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;
}
选择你最喜欢的解决方案。