虽然许多人多次询问此问题,但我再次无法以正确的文本生成所需的CSV文件。我正在创建一个CSV文件,其中的字符是用日语设置的。每当我生成CSV文件时,它都不会以正确的编码方式导出它。我想让它在excel表中可读。它在调试时显示正确的数据,并且记事本显示正确的csv但是当我从Excel读取文件时,所有文本都搞砸了。
这是我的代码:
private void GenerateCSV(string[][] value)
{
string attachment = "attachment; filename=CreatedCSV.csv";
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.AddHeader("content-disposition", attachment);
HttpContext.Current.Response.ContentType = "text/csv";
HttpContext.Current.Response.Charset = "";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
string delimiter = ", ";
int length = value.GetLength(0);
StringBuilder sb = new StringBuilder();
for (int index = 0; index < length; index++)
sb.AppendLine(string.Join(delimiter, value[index]));
HttpContext.Current.Response.Write(sb.ToString());
HttpContext.Current.Response.End();
}
我也尝试过实现unicode,但也没有帮助。我在这里缺少什么?
答案 0 :(得分:0)
您的源字符串可能编码错误。 我们使用了您的代码,它使用特殊字符,但我们的字符串构建器使用以下代码以UTF8编码:
byte[] buffer = Encoding.UTF8.GetBytes(DataFeedCSV.ToString());
答案 1 :(得分:0)
StringBuilder sb = new StringBuilder();
sb.Append("pröva-Testing");
sb.Append("\r\n");
var data = Encoding.UTF8.GetBytes(sb.ToString());
var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
return File(result, "application/csv", "foo.csv");
通过这些行,我认为Excel可以使用UTF-8对其进行编码,因为它知道它是utf8编码的csv