2011-12-06 2 views
0

사용자 기본 인코딩으로 HTML을 CSV로 디코딩하는 방법은 무엇입니까? 모든 Response.ContentEncoding 나는 횡설수설 수출을 사용한다. 그리드에SQL to Grid to CSV 문자 인코딩

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 데이터 데이터 그리드에서 "윈도우 CP-1250"로 올바르게 표시는, 그러나 CSV 모두 포함 HTML로 인코딩 된 문자 (ó 대신 &#243;, 그리드의 HTML 소스와 동일). 나는 지금이 인코딩으로 완전히 잃어버린 ...

+0

빠른 테스트, 당신은 라인을 변경할 수 있습니까 : Response.Output.Write (sb.ToString()); Response.Output.Write (HttpUtility.HtmlDecode (sb.ToString())); 출력 좀 알려주시겠습니까? – dash

+0

@dash 실제로 문제를 해결합니다 ... : P 답변으로 게시 – yosh

+0

제목 앞에 "ASP.NET C#"을 사용하지 마십시오. 그것이 바로 태그가있는 것입니다. –

답변

1

보고있는 특수 문자는 인코딩 된 콘텐츠가 아니며 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) + ';');