C# HttpResponse 不写入 CSV 文件
C# HttpResponse is not writing to CSV file
我有一个表单,只要用户单击一个按钮,它就会 return 一个 csv file
。为了 return 文件,我创建了一个名为 sb
的 StringBuilder
并将所有对 sb
的响应连接起来(要提到的一点是我的字符串是阿拉伯字符,所以我需要将它们编码为 UTF8 字符)。然后我尝试 return 我的 csv 文件,如下所示:
DataTable dt = auc.GetTradesByDate().Tables[0];
/**************************************************************/
StringBuilder sb = new StringBuilder();
sb.Append("date, symbol, symbolName, buyerId,buyerName\n");
foreach (DataRow dr in dt.Rows)
{
sb.Append(dr["date"]);
sb.Append("," + dr["symbol"]);
sb.Append("," + dr["symbolName"]);
sb.Append("," + dr["buyerId"]);
sb.Append("," + dr["buyerName"]);
sb.Append("\n");
}
Response.Clear();
Response.ClearHeaders();
Response.ContentType = "text/csv";
Response.Charset = "";
Response.ContentEncoding = Encoding.UTF8;
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment;filename=trades_{0:yyyy-MM-dd}.csv", DateTime.Now));
byte[] BOM = new byte[] { 0xef, 0xbb, 0xbf };
Response.BinaryWrite(BOM);
Response.BinaryWrite(Encoding.UTF8.GetBytes(sb.ToString()));
Response.Flush();
Response.End();
sb 已正确填写,但输出文件仍为空。我会感谢你的帮助。有人可以帮我吗?
我已经使用了建议的所有方法(1 and 2),但它仍然是空的。关键是,当我将字符串写入 XML 文件时,一切正常,但当涉及到 CSV 时,它不起作用。这真让我抓狂。我不知道出了什么问题。我是不是忘记写东西了??
如果有帮助,请尝试在两行下方发表评论
Response.Charset = "";
Response.ContentEncoding = Encoding.UTF8;
我已经尝试了很多方法来解决这个问题。因为我花了很多时间来找到问题,所以我会 post 回答也许它可以为其他人节省时间。
问题是我构建 sb
的方式。我必须通过添加格式为 CSV
文件构建它。以下对我有用:
DataTable dt = auc.GetTradesByDate().Tables[0];
/**************************************************************/
StringBuilder sb = new StringBuilder();
sb.AppendFormat("{0},{1},{2},{3},{4}"
, "date", "symbol", "symbolName", "buyerId","buyerName\n");
foreach (DataRow dr in dt.Rows)
{
sb.AppendFormat("{0},", dr["date"]);
sb.AppendFormat("{0},", dr["symbol"]);
sb.AppendFormat("{0},", dr["symbolName"]);
sb.AppendFormat("{0},", dr["buyerId"]);
sb.AppendFormat("{0}", dr["buyerName"]);
sb.AppendFormat("\n");
}
string CsvHeader = "";
Response.Clear();
Response.ContentType = "text/csv";
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment;filename=trades_{0:yyyy-MM-dd}.csv", DateTime.Now));
Response.Write(CsvHeader + sb.ToString());
Response.End();
我有一个表单,只要用户单击一个按钮,它就会 return 一个 csv file
。为了 return 文件,我创建了一个名为 sb
的 StringBuilder
并将所有对 sb
的响应连接起来(要提到的一点是我的字符串是阿拉伯字符,所以我需要将它们编码为 UTF8 字符)。然后我尝试 return 我的 csv 文件,如下所示:
DataTable dt = auc.GetTradesByDate().Tables[0];
/**************************************************************/
StringBuilder sb = new StringBuilder();
sb.Append("date, symbol, symbolName, buyerId,buyerName\n");
foreach (DataRow dr in dt.Rows)
{
sb.Append(dr["date"]);
sb.Append("," + dr["symbol"]);
sb.Append("," + dr["symbolName"]);
sb.Append("," + dr["buyerId"]);
sb.Append("," + dr["buyerName"]);
sb.Append("\n");
}
Response.Clear();
Response.ClearHeaders();
Response.ContentType = "text/csv";
Response.Charset = "";
Response.ContentEncoding = Encoding.UTF8;
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment;filename=trades_{0:yyyy-MM-dd}.csv", DateTime.Now));
byte[] BOM = new byte[] { 0xef, 0xbb, 0xbf };
Response.BinaryWrite(BOM);
Response.BinaryWrite(Encoding.UTF8.GetBytes(sb.ToString()));
Response.Flush();
Response.End();
sb 已正确填写,但输出文件仍为空。我会感谢你的帮助。有人可以帮我吗?
我已经使用了建议的所有方法(1 and 2),但它仍然是空的。关键是,当我将字符串写入 XML 文件时,一切正常,但当涉及到 CSV 时,它不起作用。这真让我抓狂。我不知道出了什么问题。我是不是忘记写东西了??
如果有帮助,请尝试在两行下方发表评论
Response.Charset = "";
Response.ContentEncoding = Encoding.UTF8;
我已经尝试了很多方法来解决这个问题。因为我花了很多时间来找到问题,所以我会 post 回答也许它可以为其他人节省时间。
问题是我构建 sb
的方式。我必须通过添加格式为 CSV
文件构建它。以下对我有用:
DataTable dt = auc.GetTradesByDate().Tables[0];
/**************************************************************/
StringBuilder sb = new StringBuilder();
sb.AppendFormat("{0},{1},{2},{3},{4}"
, "date", "symbol", "symbolName", "buyerId","buyerName\n");
foreach (DataRow dr in dt.Rows)
{
sb.AppendFormat("{0},", dr["date"]);
sb.AppendFormat("{0},", dr["symbol"]);
sb.AppendFormat("{0},", dr["symbolName"]);
sb.AppendFormat("{0},", dr["buyerId"]);
sb.AppendFormat("{0}", dr["buyerName"]);
sb.AppendFormat("\n");
}
string CsvHeader = "";
Response.Clear();
Response.ContentType = "text/csv";
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment;filename=trades_{0:yyyy-MM-dd}.csv", DateTime.Now));
Response.Write(CsvHeader + sb.ToString());
Response.End();