Кодировка символов из SQL в Grid в CSV - PullRequest
0 голосов
/ 06 декабря 2011

Как декодировать HTML в CSV с пользовательской кодировкой по умолчанию?Каждое Response.ContentEncoding, которое я использую, экспортирует тарабарщину.

SQL в сетку :

SqlConnection conn = new SqlConnection(connectionString);                
string select = "SELECT...";
SqlDataAdapter DataCommand = new SqlDataAdapter(select, conn);
DataSet ds = new DataSet();
DataCommand.Fill(ds);
GridView1.DataSource = ds.Tables[0].DefaultView;
GridView1.DataBind();

Сетка в CSV:

Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=CSVfile.csv");
Response.ContentType = "text/csv";
// other encoding like utf-8 also exports encoded data
Response.ContentEncoding = Encoding.GetEncoding("Windows-1250"); 

StringBuilder sb = new StringBuilder();      
for (int i = 0; i < GridView1.Rows.Count; i++)
{
    for (int k = 0; k < GridView1.Rows[0].Cells.Count; k++)
    {
        sb.Append(GridView1.Rows[i].Cells[k].Text + ';');
    }
    sb.Append("\r\n");
}
Response.Output.Write(sb.ToString());
Response.Flush()
Response.End();

SQL_Latin1_General_CP1_CI_AS данные правильно отображаются как «Windows CP-1250» в Grid, однако CSV содержит все символы в кодировке HTML (&#243; вместо ó и т. Д., Так же, как в HTML-источнике сетки).Я полностью потерян с этой кодировкой прямо сейчас ...

1 Ответ

1 голос
/ 06 декабря 2011

Специальные символы, которые вы видите, не закодированы, а закодированы в формате HTML. Сначала вам нужно расшифровать строку в HTML.

Попробуйте изменить:

Response.Output.Write(sb.ToString()); 

до

Response.Output.Write(HttpUtility.HtmlDecode(sb.ToString()));

Помните, что вы можете сделать это построчно для очень больших строк

(т. Е. HTML декодирует CSV построчно):

sb.Append(HttpUtility.HtmlDecode(GridView1.Rows[i].Cells[k].Text) + ';');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...