带有编码问题的CSV文件导出

时间:2016-09-14 21:44:35

标签: c# sql-server csv encoding utf-8

我正在尝试将SQL Server表导出为CSV文件:

表中的数据类似于=Presentación或Difusión

一切都很好......但在.CSV文件中我找到了:

Presentación or Difusión

这是我的.cs代码:

GridView1.AllowPaging = false;
GridView1.DataBind();

StringBuilder sb = new StringBuilder();

for (int k = 0; k < GridView1.Columns.Count; k++)
{
    // add separator
    sb.Append(GridView1.Columns[k].HeaderText + ';');
}

// append new line
sb.Append("\r\n");

for (int i = 0; i < GridView1.Rows.Count; i++)
{
    for (int k = 0; k < GridView1.Columns.Count; k++)
    {
        // add separator
        sb.Append(GridView1.Rows[i].Cells[k].Text + ';');
    }

    // append new line
    sb.Append("\r\n");
}

Encoding encoding = Encoding.UTF8;

Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=OrigenDatos.csv");  
Response.Charset = encoding.EncodingName;
Response.ContentType = "application/text";
Response.ContentEncoding = Encoding.Unicode;
Response.Output.Write(sb.ToString());
Response.Flush();
Response.End();

UTF-8是真正的字符集吗?

2 个答案:

答案 0 :(得分:1)

为了正确解码HTML文件,您的浏览器需要知道要使用的编码。您可以通过设置charset parameter或设置meta tag来告诉他:<meta charset="UTF-8">

所以:你需要使用UTF-8保存HTML文件,并正确地声明编码。

理论上,在您的服务器上,默认编码是UTF-8 - 然后您应该从.htaccess服务器文件中删除AddDefaultCharset your_encoding并写入AddDefaultCharset utf-8。但我不确定这是关于你的情况。

修改

字节&#243;代表UTF-8中的西班牙语字符ó。所以我认为你不应该尝试用其他编码进行编码,因为它绝对是utf-8。

答案 1 :(得分:0)

您可以尝试以下代码

        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, Encoding.UTF8) + "");
        Response.Cookies.Add(new System.Web.HttpCookie("fileDownload", "true"));
        Response.Charset = "";
        Response.ContentType = "application/csv";
        Response.ContentEncoding = Encoding.UTF8;
        Response.BinaryWrite(Encoding.UTF8.GetPreamble());
        Response.Write(outPutStringData); // Information which you want in .csv file
        Response.Flush();
        Response.End();