2013-03-25 3 views
1

데이터 형식 값을 CSV 형식으로 다운로드 할 수있는 코드가 있습니다. 제대로 작동하고 있으며 Csv를 다운로드 할 수 있습니다. 문제는 내 datatable에 CSV 파일을 다운로드 할 때 일부 덴마크어 문자가 포함되어 있으며 CSV 파일에 모두 포함되어 있습니다. 세부 사항이지만 덴마크 문자는 다른 문자로 대체됩니다. 여기 내 코드가있다.CSV 문자가 누락되었습니다.

string myXMLfile = Server.MapPath("~/App_Data/myfilecsv.xml"); 
DataSet ds = new DataSet(); 
System.IO.FileStream fsReadXml = new System.IO.FileStream(myXMLfile, 
                  System.IO.FileMode.Open); 

try 
{ 
    ds.ReadXml(fsReadXml); 
    DataTable dt = ds.Tables[1]; 


    System.Text.StringBuilder sb = new StringBuilder(); 

    IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>(). 
             Select(column => column.ColumnName); 
    sb.AppendLine(string.Join(",", columnNames)); 

    foreach (DataRow row in dt.Rows) 
    { 
     IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString()); 
     foreach (var item in fields) 
     { 
      sb.AppendFormat("\"{0}\",", item.Replace("\"", "\"\"")); 
     } 
     sb = sb.Remove(sb.Length - 1, 1); 
     sb.Append("\n"); 

    } 

    string attachment = "attachment; filename=mycsvfile.csv"; 
    Response.ClearContent(); 
    Response.AddHeader("content-disposition", attachment); 
    Response.ContentType = "application/csv"; 

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

} 
catch (Exception ex) 
{ 
    umbraco.BusinessLogic.Log.Add(umbraco.BusinessLogic.LogTypes.Error, 00002, ex.ToString()); 
} 
finally 
{ 
    fsReadXml.Close(); 
} 

아무도 해결책을 줄 수 있습니까 ???

+0

또 다른 질문에 대한 내 대답보기 (http://stackoverflow.com/questions/15577213/handling-null-in-linq/15577711#15577711); 처리하기 전에 데이터를 살균해야합니다 – jay

답변

0

인코딩이 없기 때문에 문제가 발생했습니다. 인코딩 (utf-8?)을 선택하고 클라이언트에 대한 응답에 적절한 정보를 추가하십시오.

How can I output a UTF-8 CSV in PHP that Excel will read properly?을보세요. 추가 응답 헤더와 특히 Excel 용 '해킹'을 볼 수 있습니다.

+0

위의 코드에서 utf-8 인코딩을 추가 할 수있는 위치는 어디입니까? – Binoop

+0

링크 된 질문 : (1) 추가 'Content-Encoding'헤더 (2) charset = 기존 'Content-Type'헤더에 UTF-8 (3) 응답 데이터의 첫 번째 바이트로 바이트 순서 표시. 3 점 모두를 확인해야한다고 생각합니다. – Dmitry

관련 문제